ここでよく聞かれるCMakeについて質問がありますが、どれも私の問題を解決していないようです。
details
サブディレクトリには、次のCMakeLists.txt
ものが含まれています。
add_custom_command(OUTPUT part.out
COMMAND foo --input=part.src --output=part.out
DEPENDS part.src)
add_custom_target(part_out
DEPENDS part.out)
メインディレクトリには、別のファイルを生成するためCMakeLists.txt
に使用するがあります。part.out
add_custom_command(OUTPUT full.out
COMMAND bar --input=./details/part.out --output=full.out)
add_custom_target(full_out
DEPENDS full.out)
問題は、ここで3つのことを実行したいということです。
part.out
存在しない場合は、生成する必要がありますpart.out
古くなっている(part.src
より新しい)場合はpart.out
再生したいfull.out
古くなっている(part.out
より新しいfull.out
、またはfull.out
存在しない)場合は、(再)生成したい
したがって、追加DEPENDS ./details/part.out
するadd_custom_command(OUTPUT full.out)
とポイント2と3が達成されますが、ポイント1は達成されません。削除part.out
してから呼び出すmake full_out
と、作成するルールがないというエラーが発生するためです./details/part.out
(別のディレクトリからのルールであるため)。
追加または追加DEPENDS full_out
すると、ポイント1と2が達成されますが、3は達成されません。これは、再生成されたとしても、ファイル自体に依存しないため、再生成されないためです。add_custom_command(OUTPUT full.out)
add_custom_target(full_out)
part.out
full.out
part.out
では、どうすれば両方のシナリオを接続できますか?両方を追加することを考えていましDEPENDS
たが、それが常に機能するかどうかをどうやって知ることができますか?そのような場合、ビルドの順序がここで重要になることを意味します。