我想强制执行兄弟依赖项的执行顺序。我们假设我们有以下顶级目标:
add_custom_target(test_all)
add_custom_target(test_coverage)
add_custom_target(test_coverage_zero)
add_custom_target(test_coverage_collect)
我使用test_all
执行单元测试(并可能构建它们及其依赖项)。 test_coverage
应该执行test_coverage_zero
,然后执行test_all
,最后执行test_coverage_collect
。 test_coverage_zero
将清除前一轮test_all
的剩余覆盖率数据,而test_coverage_collect
使用当前的覆盖率数据并生成某种人类可读的输出。此设置的原因是允许执行test_all
而无需实际的覆盖数据处理。另一方面,test_coverage
需要执行test_all
来生成覆盖数据。
[详情:我使用gcov
/ lcov
作为覆盖数据,并为test_coverage_zero
和test_coverage_collect
添加了自定义命令以进行实际处理]
我已设置以下依赖项来实现此行为:
add_dependencies(test_coverage test_coverage_zero test_all test_coverage_collect)
这不起作用。实际执行顺序为test_all
,test_coverage_zero
和test_coverage_collect
,它们会在收集步骤之前删除coverage数据。
我的问题:如何在CMake中强制执行目标依赖项的顺序(在兄弟级别上)?
答案 0 :(得分:0)
看起来答案是:
add_dependencies(test_all test_coverage_zero)
add_dependencies(test_coverage_collect test_all)
add_dependencies(test_coverage test_coverage_zero test_all test_coverage_collect)
但是,即使存在明确的依赖关系链test_coverage_zero
< - test_all
< - ,从最后一个依赖关系中移除test_coverage
或test_coverage_collect
也无效。 test_all
< - test_coverage_zero