2016-03-30 30 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_coveragetest_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_zerotest_coverage_collectにカスタムコマンドを追加しています。]

私はセットアップこの動作を達成するために、次の依存関係をしました:

add_dependencies(test_coverage test_coverage_zero test_all test_coverage_collect) 

これは機能しません。実際の実行順序は、test_all,test_coverage_zero、およびtest_coverage_collectです。これにより、収集ステップの前にカバレッジデータが削除されます。

私の質問:どのようにCMakeの(兄弟レベルで)ターゲットの依存関係の順序を強制するのですか?

+0

兄弟間の依存関係を追加しますか? – usr1234567

+0

@ usr1234567:それを試してもうまくいきませんでした – regnirpsj

+0

あなたのターゲットの実際の 'COMMAND'パーツを教えてください。 '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は、 。

関連する問題