私は多くのサブプロジェクトを持つCMakeプロジェクトを持っています。 それぞれは、(add_custom_commandを呼び出すことによって)いくつかの特定の情報を持つ小さなテキストファイルを生成するために私が提供する関数を使用することができます。 最後のステップでは、これらのファイルを1つの大きなテキストファイルにまとめたいと思います。CMake:add_custom_commandへの依存性を動的に追加
私は作成したファイルを(一箇所に)検索してマージするカスタムコマンドを作成しました。
問題は、最終的なステップをサブプロジェクトで行われるすべての小さなステップに依存させたいのですが、実際にいくつのファイルが提供されるのかは分かりません。
私の最後のコマンドは次のようになります。
add_custom_command(OUTPUT combination.txt
COMMAND create combination.txt from all files from /path/)
と私の作成 - 小さなテキスト・ファイルのfor-each-サブコマンドは次のようになります。
add_custom_command(OUTPUT /path/${sub_project_name}.txt
COMMAND create /path/${sub_project_name}.txt)
そして、私はそれらの小さなファイルを作成します
:私は、だから私は、私は可能性がしたい「combination.txtは」/path/${sub_project_name}.txtに依存にするような何かをしたいと思います
add_dependency(combination.txt /path/${sub_project_name}.txt)
ただし、これはターゲットでのみ有効です。
私が見る私も(多分そのadd_targetのCPPファイルで使用するつもり?)OBJECT_DEPENDSでset_source_files_propertiesを使用しようとしましたが、動作しないように思わまし
それは仕事を取得する最後の方法です
add_custom_command(OUTPUT combination.txt
COMMAND create combination.txt from all files from /path/
DEPENDS ${all_small_files_list})
が、これは私がやりたい最後のものである:すべてのそれらの小さなファイルのパスを蓄積し、このようにそれを使用するキャッシュ変数を使用します。
期待通りに動作しません。 makeを呼び出すたびに、すべてのターゲット(組み合わせ、プロジェクト、プロジェクト2)が再構築されるため、ファイルが再生成されます。 これはできるだけいいとは限りません;) 私の予想される動作は、必要でない限りファイルを再生成しないことです。 CMakeのdocsによると、add_custom_targetは毎回構築されています。 私は、add_custom_commandとして働いていたソリューションを望みました。依存関係が変更された場合にのみビルドされます。 –
project.txtを生成するために依存関係として何を使用しますか?私はcmake-docが何を言いたいのかというと、custom_targetは再構築する必要があるかどうか常にチェックされています。少なくとも、私のように動作するようです。 –
さて、私たちはそれをどうやって正しく読んだら、時期尚早であることを認めなければなりません。答えの私の更新を見てください。 –