web-dev-qa-db-ja.com

cmakeファイルで既存のmakeコマンドを呼び出す

複数のサブディレクトリを持つ大規模なプロジェクトがあります。親ディレクトリには、同じ親ディレクトリ内の他のcmakeファイルで定義されている関数を呼び出すCMakeLists.txtファイルがあります。ターゲット「実行」を含むサブディレクトリの1つにカスタムMakefileがあります。親ディレクトリからcmakeを呼び出すとき、サブディレクトリmakefileにある「run」ターゲットを実行する必要があります。どうすればいいですか? add_custom_targetとadd_custom_commandの使用を提案している人もいることは理解していますが、このタスクを実行するためにこれらのコマンドを適用する方法についてはまだ混乱しています。

10
imgolden62

サブファイル内の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 [〜#〜]

19
Tsyvarev