CMake中生成的文件的运行时依赖性

时间:2018-03-19 11:23:17

标签: cmake parallel-builds

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

目前,使用add_dependencies(MyTest GenerateFile)生成的文件存在构建时依赖关系,其中GenerateFile是自定义目标,取决于自定义命令的输出。 缺点: MyTestGenerateFile完成构建之前无法开始编译代码。这是不必要的 - 我想构建MyTest并并行生成文件。

我考虑的另一个选项是添加一个取决于MyTestAndGenerateFileMyTest的新目标GenerateFile缺点:调用make MyTest不再生成文件。一个人必须记得改为呼叫make MyTestAndGenerateFile

或者,可以将新目标称为MyTest,并使用add_executable(MyTest_Code ...)添加测试。 缺点:使用Visual Studio生成器时,测试代码现在将位于名为MyTest_Code的项目中,而不是MyTest,这会破坏命名约定。此外,您现在必须构建 MyTest项目,但运行 MyTest_Code项目,因此您无法使用 Set as start-

以上。

简而言之,我正在寻找一种add_dependencies形式,表示在构建时不需要依赖,而是在运行时。

1 个答案:

答案 0 :(得分: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)