兄弟依存関係の実行順序を強制したいと思います。我々は、次のトップレベルの目標を持っていると仮定しましょう: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_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
です。これにより、収集ステップの前にカバレッジデータが削除されます。
私の質問:どのようにCMakeの(兄弟レベルで)ターゲットの依存関係の順序を強制するのですか?
兄弟間の依存関係を追加しますか? – usr1234567
@ usr1234567:それを試してもうまくいきませんでした – regnirpsj
あなたのターゲットの実際の '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