CMake:如何指定 ctest 应在其中查找可执行文件的目录?
CMake: How to specify directory where ctest should look for executables?
我想将 ctest 集成到 c++/c 项目中。我使用 google 测试来编写单元测试。
我的 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 folder"。这里我想用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
如果我将 "test_exe" 放在显示的路径之一中,它就可以正常工作。但我不希望他们在那里。
我的问题:
有没有办法告诉 ctest 它应该在 UNIT_TEST_BIN_OUTPUT_DIR
中查找以找到可执行文件?
在我们的项目中,我们总是在调用 add_test() 时指定路径,例如:
add_test( ${filename} ${CMAKE_CURRENT_BINARY_DIR}/${filename} )
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
的 缩写形式 。
使用 CMake 3.20 及更高版本,您可以使用 CLI option:
告诉 CTest 哪个目录包含您的测试
ctest --test-dir /path/to/your/tests
这是针对现有测试的侵入性较小的解决方案,您不想为此修改 CMake 文件。
我想将 ctest 集成到 c++/c 项目中。我使用 google 测试来编写单元测试。
我的 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 folder"。这里我想用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
如果我将 "test_exe" 放在显示的路径之一中,它就可以正常工作。但我不希望他们在那里。
我的问题:
有没有办法告诉 ctest 它应该在 UNIT_TEST_BIN_OUTPUT_DIR
中查找以找到可执行文件?
在我们的项目中,我们总是在调用 add_test() 时指定路径,例如:
add_test( ${filename} ${CMAKE_CURRENT_BINARY_DIR}/${filename} )
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
的 缩写形式 。
使用 CMake 3.20 及更高版本,您可以使用 CLI option:
告诉 CTest 哪个目录包含您的测试ctest --test-dir /path/to/your/tests
这是针对现有测试的侵入性较小的解决方案,您不想为此修改 CMake 文件。