CMake:如何指定 ctest 应该在其中查找可执行文件的目录
CMake: How to specify directory where ctest should look for executables?
我想将ctest集成到c ++/c项目中。我使用谷歌测试来编写单元测试。
我的CMakeList的相关部分.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
如果我将"test_exe"放在显示的路径之一中,它可以正常工作。但我不希望他们在那里。
我的问题:
有没有办法告诉 ctest 它应该在UNIT_TEST_BIN_OUTPUT_DIR
中查找以找到可执行文件?
使用 CMake 3.20 及更高版本,您可以使用 CLI 选项告诉 CTest 哪个目录包含您的测试:
ctest --test-dir /path/to/your/tests
对于您不希望修改 CMake 文件的现有测试,这是一个侵入性较小的解决方案。
add_test
文档指定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 是否为目标名称,如果是,则将其替换为对应于该目标的可执行文件的绝对路径。这样,可以从任何目录运行测试。
请注意,目标的自动替换不适用于您使用的简短形式的add_test
。
在我们的项目中,我们总是在调用 add_test(( 时指定路径,例如:
add_test( ${filename} ${CMAKE_CURRENT_BINARY_DIR}/${filename} )
相关文章:
- 如何将不同的可执行文件合并到一个窗口框架中进行编码?像浏览器一样
- 如何使 windows 命令提示符在C++可执行文件上显示返回值?
- CMake:如何将库 A 链接到库 B,然后将可执行文件链接到库 A
- 如何使字符串出现在编译的二进制可执行文件的开头?
- 程序在使用 system() 启动另一个可执行文件时停止
- 如何更改使用 CPack 安装的可执行文件的名称?
- 在Linux上使用Clang / OLLVM交叉编译helloworld Windows可执行文件时的问题
- CMake:我们可以为一组不形成可执行文件或库的特定文件指定包含目录吗?
- 在终端中运行可执行文件与在Mac查找器中打开
- 在链接可执行文件之前查找静态库未解析的依赖项
- CMake:如何指定 ctest 应该在其中查找可执行文件的目录
- C++通过windows搜索路径查找可执行文件
- LD_BIND_NOW:符号查找错误,但可执行文件仍在运行
- 使用 WinDbg 查找可执行文件
- VS2010:设置可执行文件在哪个目录中查找文件
- 用于查找可执行文件依赖项的命令
- 如何在OS X中查找可执行文件在C中的位置
- 从可执行文件中查找编译优化标志
- 查找形成C++可执行文件的所有库和头文件
- 使用Qt5查找可执行文件