Ctestをc ++/cプロジェクトに統合したかったのです。私はグーグルテストを使ってユニットテストを書きます。
私のCMakeLists.txtの関連部分は次のようになります。
...
####### CREATING EXE #######
add_executable(test_exe main.cpp test.cpp)
target_link_libraries(test_exe GTest::GTest GTest::Main)
set_target_properties (test_exe PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${UNIT_TEST_BIN_OUTPUT_DIR})
add_test(test_exe test_exe)
ご覧のとおり、実行可能ファイルの出力ディレクトリ(UNIT_TEST_BIN_OUTPUT_DIR)を指定しました。
ターミナルを使用すると、実行可能ファイルはそれ自体で正常に動作します。
cd <UNIT_TEST_BIN_OUTPUT_DIR>
./test_exe
Ctestを使用してテストを実行したいと思います。そこで、cmakeによって生成された「ctestフォルダー」に移動します。ここでは、ctestを使用して、cmakeの「add_test」によって追加されたすべてのテストを実行します。
user@user:~/<dir to cmake>/cmake/unit_tests$ ctest
Test project /<dir to cmake>/cmake/unit_tests
Start 1: test_exe
Could not find executable test_exe
Looked in the following places:
test_exe
test_exe
Release/test_exe
Release/test_exe
Debug/test_exe
Debug/test_exe
MinSizeRel/test_exe
MinSizeRel/test_exe
RelWithDebInfo/test_exe
RelWithDebInfo/test_exe
Deployment/test_exe
Deployment/test_exe
Development/test_exe
Development/test_exe
Unable to find executable: test_exe
1/1 Test #1: test_exe ......***Not Run 0.00 sec
0% tests passed, 1 tests failed out of 1
Total Test time (real) = 0.00 sec
The following tests FAILED:
1 - test_exe (Not Run)
Errors while running CTest
表示されているパスの1つに「test_exe」を配置すると、正常に機能します。しかし、私は彼らがそこにいることを望んでいません。
私の質問:
実行可能ファイルを見つけるためにUNIT_TEST_BIN_OUTPUT_DIR
を調べる必要があることをctestに伝える方法はありますか?
Documentation for add_test
は、コマンドのlong formのWORKING_DIRECTORYオプションを指定します。このオプションの値は、テストが動作するディレクトリとして使用されます。
add_test(NAME test_exe COMMAND test_exe WORKING_DIRECTORY ${UNIT_TEST_BIN_OUTPUT_DIR})
テストで実行可能ファイルを検索するだけの場合は、次を使用するだけで十分です。
add_test(NAME test_exe COMMAND test_exe)
これは、add_test
コマンドの長い形式です。この形式では、CMakeはCOMMANDがtarget名であるかどうかを確認し、そうである場合は、そのターゲットに対応する実行可能ファイルへの絶対パスに置き換えます。このようにして、テストは任意のディレクトリから実行できます。
ターゲットの自動置換は、使用するadd_test
の短縮形では機能しないことに注意してください。
私たちのプロジェクトでは、add_test()を呼び出すときに常にパスを指定します。例:
add_test( ${filename} ${CMAKE_CURRENT_BINARY_DIR}/${filename} )