8

インストール ターゲットが台無しになっている場合、ExternalProjects を参照するのは面倒な場合があります。そのため、特定のプロジェクトのメイン プロジェクト ファイルを生成する前に、ExternalProjects をビルドしてインストールする必要がある場合があります。CMakeで可能ですか、それを行う方法は?

4

1 に答える 1

11

ExternalProject を含む CMake プロジェクトを構成およびビルドするためにcmakecall withinを使用できます。execute_process

other_project/CMakeLists.txt :

project(other_project)
include(ExternalProject)

ExternalProject_Add(<project_name> <options...>)

CMakeLists.txt :

# Configure external project
execute_process(
    COMMAND ${CMAKE_COMMAND} ${CMAKE_SOURCE_DIR}/other_project
    WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/other_project
)

# Build external project
execute_process(
    COMMAND ${CMAKE_COMMAND} --build ${CMAKE_BINARY_DIR}/other_project
)

このようにして、other_projectが構成され、 directory にビルドされます${CMAKE_BINARY_DIR}/other_projectExternalProject_Add呼び出しでインストールを無効にしない場合は、 other_projectのビルド時に実行されます。

SOURCE_DIR通常、、、、などのExternalProject のいくつかのオプションをBINARY_DIRINSTALL_DIRメイン プロジェクトの変数から推定する必要があります。それを実現するには、次の 2 つの方法があります。

  1. メイン プロジェクトから呼び出される (コマンドの前)を使用して、 other_projectCMakeLists.txtを作成します。configure_fileexecute_process

  2. 変数をメイン プロジェクトから-Dパラメータとして に渡します${CMAKE_COMMAND}


シーケンシャルの呼び出しを分離 することが重要です。それ以外の場合、 singleを multiple とともに使用すると、これらのコマンドは単に「パイプ処理」されます (同時に実行されますが、最初のコマンドの出力は 2 番目のコマンドの入力として扱われます)。execute_processCOMMANDSexecute_processCOMMANDS

于 2016-05-31T19:38:26.760 に答える