CTEST:如何在全球设置Working_Directory?
最近,我一直在使用CTEST建立一个简单的测试套件。以最简单的形式看起来像这样:
cmake_minimum_required(VERSION 3.7)
project(testsuite)
enable_testing()
add_test(NAME test_0
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
COMMAND script.sh arg-0)
add_test(NAME test_1
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
COMMAND script.sh arg-1)
add_test(NAME test_2
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
COMMAND script.sh arg-2)
但是,随着它的成长,我很快就厌倦了必须在每个测试中重复works_directory $ {cmake_current_source_dir}
。
问题:有没有办法设置working_directory
全球(或者,在每个测试子目录中局部更好)? 到目前为止,最接近解决方案的东西
cmake_minimum_required(VERSION 3.7)
project(testsuite)
enable_testing()
set(DEFAULT_WORKING_DIRECTORY ${CMAKE_SOURCE_DIR})
add_test(NAME test_0
COMMAND script.sh arg-0)
add_test(NAME test_1
COMMAND script.sh arg-1)
add_test(NAME test_2
COMMAND script.sh arg-2)
是我亲爱的同事定义生成的功能的建议:
cmake_minimum_required(VERSION 3.7)
project(testsuite)
enable_testing()
function(add_my_test TEST_NAME TEST_COMMAND TEST_ARGUMENTS)
add_test(NAME ${TEST_NAME}
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
COMMAND ${TEST_COMMAND} ${TEST_ARGUMENTS})
endfunction()
add_my_test(test_0 script.sh arg-0)
add_my_test(test_1 script.sh arg-1)
add_my_test(test_2 script.sh arg-2)
这很好,但感觉就像是不必要的间接级别。
最后,我选择使用a fixture 将必要的零件复制到构建文件夹中,在此处测试并再次清理;这可能是一个更干净,更惯用的解决方案。但是,出于好奇,我仍然对解决原始问题的解决方案感兴趣。
Recently, I have been building a simple test-suite with CTest. In its most simple form it looked something like this:
cmake_minimum_required(VERSION 3.7)
project(testsuite)
enable_testing()
add_test(NAME test_0
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
COMMAND script.sh arg-0)
add_test(NAME test_1
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
COMMAND script.sh arg-1)
add_test(NAME test_2
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
COMMAND script.sh arg-2)
However, as it was growing, I quickly became tired of having to repeat WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
in every test.
Question: Is there a way to set WORKING_DIRECTORY
globally (or, yet better, locally within each test subdirectory)? Something like
cmake_minimum_required(VERSION 3.7)
project(testsuite)
enable_testing()
set(DEFAULT_WORKING_DIRECTORY ${CMAKE_SOURCE_DIR})
add_test(NAME test_0
COMMAND script.sh arg-0)
add_test(NAME test_1
COMMAND script.sh arg-1)
add_test(NAME test_2
COMMAND script.sh arg-2)
The closest to a solution so far is a recommendation of my dear colleague to define a test-generating function:
cmake_minimum_required(VERSION 3.7)
project(testsuite)
enable_testing()
function(add_my_test TEST_NAME TEST_COMMAND TEST_ARGUMENTS)
add_test(NAME ${TEST_NAME}
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
COMMAND ${TEST_COMMAND} ${TEST_ARGUMENTS})
endfunction()
add_my_test(test_0 script.sh arg-0)
add_my_test(test_1 script.sh arg-1)
add_my_test(test_2 script.sh arg-2)
This works fine but it feels like an unnecessary level of indirection.
In the end, I opted for using a fixture to copy the necessary parts into the build folder, test there and clean up again; this is probably a cleaner and more idiomatic solution. Nevertheless, out of curiosity I would still be interested in a solution to the original problem.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
在文档中指定了add_test的默认工作_directory。
了。我会这样:
您也可以滚动自己的功能“覆盖” cmake命令使用宏命令并还原其默认行为,但我相信只有包装器功能很棒且干净。
No. The default WORKING_DIRECTORY for add_test is specified in documentation.
Do it. I would do:
You can also roll your own functionality 'Overwrite' cmake command using a macro and restore its default behavior , but I believe just a wrapper function is great and clean.