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

Run-time dependency on generated file in CMake

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

当前,使用 add_dependencies(MyTest GenerateFile) 生成的文件存在 build-time 依赖性,其中 GenerateFile 是依赖于自定义命令的自定义目标输出。 缺点: MyTest 直到 GenerateFile 完成构建后才开始编译代码。这是不必要的——我想构建 MyTest 并并行生成文件。

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

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

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

您可以尝试添加一个调用目标 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)