複数のサブディレクトリを持つ大規模なプロジェクトがあります。親ディレクトリには、同じ親ディレクトリ内の他のcmakeファイルで定義されている関数を呼び出すCMakeLists.txtファイルがあります。ターゲット「実行」を含むサブディレクトリの1つにカスタムMakefileがあります。親ディレクトリからcmakeを呼び出すとき、サブディレクトリmakefileにある「run」ターゲットを実行する必要があります。どうすればいいですか? add_custom_targetとadd_custom_commandの使用を提案している人もいることは理解していますが、このタスクを実行するためにこれらのコマンドを適用する方法についてはまだ混乱しています。
サブファイル内のMakefileによって生成されるファイルがわかっていて、これらのファイルに依存する場合は、add_custom_command
を使用します。
add_custom_command(OUTPUT <output-file>
COMMAND make run
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/<subdir>
)
これは、CMakeLists.txt
にターゲットがあることを前提としています。ターゲットは、特定のファイルに依存するか、使用します。
それ以外の場合、Makefileによって生成されるファイルを気にしない場合は、add_custom_target
を使用します。
add_custom_target(<target_name> COMMAND make run
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/<subdir>
)
どちらの場合でもWORKING_DIRECTORYは、実行されるコマンドのcurrentであるディレクトリを指定します。
ターゲット(2番目の場合)をデフォルトで実行する場合は、[〜#〜] all [〜#〜]オプションを[〜#〜] command [〜#〜]。