c-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

如果我将“ test_exe”放在显示的路径之一中,则可以正常工作.但是我不希望他们在那里.

我的问题:

有没有办法告诉ctest它应该在UNIT_TEST_BIN_OUTPUT_DIR中查找才能找到可执行文件?

解决方法:

add_test的Documentation为命令的长格式指定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.

上一篇:你真的理解devDependencies和dependencies区别吗?


下一篇:BERT生成能力改进:分离对话生成和对话理解