2016-03-30 33 views
0

我想强制执行兄弟依赖关系的执行顺序。假设我们有以下的顶层目标: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_all,test_coverage_zerotest_coverage_collect,这将在收集步骤之前删除覆盖率数据。

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

+0

在兄弟之间添加其他依赖关系吗? – usr1234567

+0

@ usr1234567:试过了,似乎没有任何效果 – regnirpsj

+0

您能否为实际目标提供实际的“命令”部分?从看看它,我认为如果你使用['add_custom_command()'](https://cmake.org/cmake/help/v3.3/command),你不需要'test_coverage_zero'和'test_coverage_collect'目标/add_custom_command.html)调用并输出正确的'OUTPUT'和'DEPENDS'文件。 – Florian

回答

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

相关问题