运行-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
,它依赖于 MyTest
和 GenerateFile
。 缺点:调用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)
我有一个测试 (add_executable(MyTest ...)
),需要 运行 时的文件。该文件是使用自定义命令生成的。我想在 CMake 中模拟 运行-time 依赖关系。
当前,使用 add_dependencies(MyTest GenerateFile)
生成的文件存在 build-time 依赖性,其中 GenerateFile
是依赖于自定义命令的自定义目标输出。 缺点: MyTest
直到 GenerateFile
完成构建后才开始编译代码。这是不必要的——我想构建 MyTest
并并行生成文件。
我考虑的另一个选择是添加一个新目标 MyTestAndGenerateFile
,它依赖于 MyTest
和 GenerateFile
。 缺点:调用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)