1

我有一个测试(add_executable(MyTest ...)),它在运行时需要一个文件。该文件是使用自定义命令生成的。我想在 CMake 中对运行时依赖项进行建模。

目前,使用where is a custom target对生成的文件存在构建时依赖关系,该目标依赖于自定义命令的输出。缺点:在构建完成之前不会开始编译代码。这是不必要的——我想并行构建和生成文件。add_dependencies(MyTest GenerateFile)GenerateFile MyTestGenerateFileMyTest

我考虑的另一个选择是添加一个新目标MyTestAndGenerateFile,该目标同时依赖于MyTestGenerateFile缺点:调用make MyTest不再生成文件。一个人必须记得打电话make MyTestAndGenerateFile

或者,可以调用新目标MyTest并使用add_executable(MyTest_Code ...). 缺点:使用 Visual Studio 生成器时,测试代码现在将位于名为MyTest_Code而不是的项目中MyTest,这违反了命名约定。此外,您现在必须构建项目,MyTest运行项目,MyTest_Code因此您不能再使用设置为启动项目

简而言之,我正在寻找一种add_dependencies说法,即在构建时不需要依赖项,而是在运行时需要。

4

1 回答 1

1

您可以尝试添加一个调用目标的测试,GenerateFile并使您的实际测试依赖于前者。像这样的东西:

add_test(NAME MakeGenerateFile COMMAND ${CMAKE_COMMAND} --build ${CMAKE_BINARY_DIR} --target GenerateFile)
add_test(MyTest MyTest)
set_tests_properties(MyTest PROPERTIES DEPENDS MakeGenerateFile)
于 2018-03-19T13:00:19.407 回答