web-dev-qa-db-ja.com

CMake:ctestが実行可能ファイルを探すディレクトリを指定するにはどうすればよいですか?

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に伝える方法はありますか?

7
ysfaran

Documentation for add_testは、コマンドのlong formWORKING_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短縮形では機能しないことに注意してください。

11
Tsyvarev

私たちのプロジェクトでは、add_test()を呼び出すときに常にパスを指定します。例:

add_test( ${filename}  ${CMAKE_CURRENT_BINARY_DIR}/${filename} )
2
Rene