ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

c-CMake:如何指定ctest在其中查找可执行文件的目录?

2019-10-11 01:07:07  阅读:337  来源: 互联网

标签:c cmake googletest 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.

标签:c,cmake,googletest,ctest
来源: https://codeday.me/bug/20191010/1888916.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有