CMake中生成的文件的运行时依赖关系
Posted
技术标签:
【中文标题】CMake中生成的文件的运行时依赖关系【英文标题】:Run-time dependency on generated file in CMake 【发布时间】:2018-03-19 11:23:16 【问题描述】:我有一个测试 (add_executable(MyTest ...)
) 在运行时需要一个文件。该文件是使用自定义命令生成的。我想在 CMake 中为 run-time 依赖建模。
目前,使用add_dependencies(MyTest GenerateFile)
生成的文件存在构建时间 依赖关系,其中GenerateFile
是依赖于自定义命令输出的自定义目标。 缺点: MyTest
在 GenerateFile
完成构建之前不会开始编译代码。这是不必要的——我想构建MyTest
并并行生成文件。
我考虑的另一个选项是添加一个新目标MyTestAndGenerateFile
,它同时依赖于MyTest
和GenerateFile
。 缺点:调用make MyTest
不再生成文件。一定要记得打电话给make MyTestAndGenerateFile
。
或者,可以将新目标称为MyTest
,并且可以使用add_executable(MyTest_Code ...)
添加测试。 缺点:使用 Visual Studio 生成器时,测试代码现在将位于名为 MyTest_Code
而不是 MyTest
的项目中,这违反了命名约定。此外,您现在必须构建 MyTest
项目,但运行 MyTest_Code
项目,因此您不能使用设置为启动项目 em> 没有了。
简而言之,我正在寻找一种add_dependencies
的形式,表示在构建时不需要依赖项,而是在运行时需要。
【问题讨论】:
CMake 无法跟踪您如何启动已编译的二进制文件。让它跟踪它的唯一方法是添加一个自定义目标来运行它。 @arrowd 也许“运行时依赖”在这里具有误导性,但我想不出更好的术语。我只想确保在构建MyTest
时将GenerateFile
更新到最新状态,但没有MyTest
等待GenerateFile
在开始构建之前完成。
【参考方案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)
【讨论】:
以上是关于CMake中生成的文件的运行时依赖关系的主要内容,如果未能解决你的问题,请参考以下文章
下列软件包有未满足的依赖关系: cmake-qt-gui : 依赖: cmake (= 3.10.2-1ubuntu2) E: 无法修正错误,因为您要求某些软件包保持现状,就是它们破坏了软件包间的依