如何在CMake中为测试目标添加依赖项?

时间:2017-12-29 07:49:05

标签: cmake pytest

我通过命令add_test添加了一些测试:

find_program(PYTEST "pytest")
add_test(NAME test_something COMMAND ${PYTEST})

但在此测试之前,我需要复制一些测试文件(包括要运行的python测试脚本)。为此,有一个自定义目标generate_init_queries。由于add_test未创建目标,因此我无法使用add_dependencies链接我的自定义目标generate_init_queries和此测试。我认为在CMake中应该存在test目标并添加命令:

add_dependencies(test generate_init_queries)

但导致错误annot add target-level dependencies to non-existent target "test"。如何在make test中运行测试之前复制文件?

2 个答案:

答案 0 :(得分:0)

通过add_custom_target ALL关键字:

完成了
find_program(PYTEST "pytest")
add_test(test_something ${PYTEST} test_something.py)
add_custom_target(test_something_py_copy ALL COMMAND ${CMAKE_COMMAND} -E copy_if_different ${CMAKE_CURRENT_SOURCE_DIR}/test_something.py ${TEST_DATA_DIR}/test_something.py DEPENDS generate_init_queries)

答案 1 :(得分:0)

这个问题与 CMake & CTest : make test doesn't build tests 高度相关,后者受到了更多关注。现在最好的答案(问题来自 2009 年)是 IMO this one。 IE。使用 cmake 中的 fixtures 功能,可从 3.7 版开始使用。

请参阅 FIXTURES_REQUIRED docs 以获得良好的概述和用法示例。我还可以推荐 test-properties documentation page 以更广泛地了解哪些属性可用于影响 ctest 测试执行。

针对您的用例进行了如此修改,可能的解决方案大致如下所示:

add_test(gen_init_queries
  "${CMAKE_COMMAND}"
  --build "${CMAKE_BINARY_DIR}"
  --config "$<CONFIG>"
  --target generate_init_queries
)
set_tests_properties(gen_init_queries PROPERTIES FIXTURES_SETUP f_init_queries)
set_tests_properties(test PROPERTIES  FIXTURES_REQUIRED f_init_queries)