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

如何在CMake中向测试目标添加依赖项?,cmake,pytest,Cmake,Pytest,我通过命令add_test添加了一些测试: 但是在这个测试之前,我需要复制一些测试文件,包括要运行的python测试脚本。为此,有一个自定义目标generate_init_查询。由于add_测试不创建目标,因此我不能使用add_依赖项来链接我的自定义目标generate_init_查询和此测试。我假设CMake中应该存在一个测试目标,并添加了以下命令: add_dependencies(test generate_init_queries) 但这导致了一个错误,即不能将目标级别的依赖项添加到不

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

但是在这个测试之前,我需要复制一些测试文件,包括要运行的python测试脚本。为此,有一个自定义目标generate_init_查询。由于add_测试不创建目标,因此我不能使用add_依赖项来链接我的自定义目标generate_init_查询和此测试。我假设CMake中应该存在一个测试目标,并添加了以下命令:

add_dependencies(test generate_init_queries)
但这导致了一个错误,即不能将目标级别的依赖项添加到不存在的目标测试中。在make test中运行测试之前,我如何复制文件?

通过添加带有ALL关键字的自定义目标:


这个问题与它密切相关,它得到了更多的关注。现在最好的答案是2009年的IMO。也就是说,使用3.7版以后的cmake中的夹具功能

有关良好的概述和用法示例,请参见。我还可以建议更广泛地概述哪些属性可用于影响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)
您仍然需要在进行测试之前运行make。不知道你的成就是什么。看起来你有一些其他的问题,然后你在问题帖中描述了一个。
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)
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)