我有一个测试(add_executable(MyTest ...)
),它在运行时需要一个文件。该文件使用自定义命令生成。我想在CMake中模拟运行时依赖项。
目前,使用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
项目,因此您无法使用 Set as start-
简而言之,我正在寻找一种add_dependencies
形式,表示在构建时不需要依赖,而是在运行时。
答案 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)