ここでよく聞かれる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.outfull.outpart.out
では、どうすれば両方のシナリオを接続できますか?両方を追加することを考えていましDEPENDSたが、それが常に機能するかどうかをどうやって知ることができますか?そのような場合、ビルドの順序がここで重要になることを意味します。