2016-03-30 36 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

相關問題