it-swarm-ja.com

CMakeのExternalProject_Addでビルドプロセスを構成します

制御できない別のプロジェクト(サブプロジェクト)に依存するC++プロジェクト(スーパープロジェクト)があります。プロジェクトをビルドできるようにするには、最初にサブプロジェクトをビルドし、次にサブプロジェクトでビルドされたライブラリにリンクするスーパープロジェクトをビルドする必要があります。

どちらのプロジェクトもCMakeを使用して、対応するMakefileを構成します。手動で、サブプロジェクトをスーパープロジェクトのサブフォルダー(externals/Subproject)にダウンロードしてから、cdexternals/Subproject/buildにダウンロードし、cmake ..、次にmake target1を実行する必要があります。

ExternalProject_Add機能を使用して、SuperprojectCMakeListsファイル内からこのプロセスを自動化したいと思います。これまでのところ私は

ExternalProject_Add(Subproject
    DOWNLOAD_DIR "${CMAKE_CURRENT_SOURCE_DIR}/externals"
    GIT_REPOSITORY "[email protected]/to/repo/Subproject.git"
    GIT_TAG "master"
    SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/build"
)

これは、サブプロジェクトのallターゲットを正しくダウンロードしてビルドします。しかし、サブプロジェクトのtarget1のみをビルドするように変更しようとすると

ExternalProject_Add(Subproject
    DOWNLOAD_DIR "${CMAKE_CURRENT_SOURCE_DIR}/externals"
    GIT_REPOSITORY "[email protected]/to/repo/Subproject.git"
    GIT_TAG "master"
    SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/build"
    BUILD_COMMAND "${MAKE} target1"
)

makeコマンドの実行に失敗し、/bin/shtarget1が何であるかを知らないと文句を言います。

必要に応じて、コンパイルターゲットをExternalProject_Addから変更するにはどうすればよいですか?

1
Jesús Ros

最後に、BUILD_COMMANDステートメント内の引用符を削除し、中括弧をMAKEディレクティブの前後の括弧に変更してから、INSTALL_COMMANDを無効にすることで、なんとか解決しました。

ExternalProject_Add(Subproject
    DOWNLOAD_DIR "${CMAKE_CURRENT_SOURCE_DIR}/externals"
    GIT_REPOSITORY "[email protected]/to/repo/Subproject.git"
    GIT_TAG "master"
    SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/build"
    BUILD_COMMAND $(MAKE) target1
    INSTALL_COMMAND "")
1
Jesús Ros