CMake:在兄弟姐妹目标依赖关系之间执行执行顺序

时间:2016-03-30 12:19:50

标签: cmake

我想强制执行兄弟依赖项的执行顺序。我们假设我们有以下顶级目标:

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_collecttest_coverage_zero将清除前一轮test_all的剩余覆盖率数据,而test_coverage_collect使用当前的覆盖率数据并生成某种人类可读的输出。此设置的原因是允许执行test_all而无需实际的覆盖数据处理。另一方面,test_coverage需要执行test_all来生成覆盖数据。

[详情:我使用gcov / lcov作为覆盖数据,并为test_coverage_zerotest_coverage_collect添加了自定义命令以进行实际处理]

我已设置以下依赖项来实现此行为:

add_dependencies(test_coverage test_coverage_zero test_all test_coverage_collect)

这不起作用。实际执行顺序为test_alltest_coverage_zerotest_coverage_collect,它们会在收集步骤之前删除coverage数据。

我的问题:如何在CMake中强制执行目标依赖项的顺序(在兄弟级别上)?

1 个答案:

答案 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_coveragetest_coverage_collect也无效。 test_all< - test_coverage_zero