2

mangrove (mongo-c-driver および mongo-cxx-driver 上の mongo ODM lib) を使用する必要があり、これを私のプロジェクトに CMakeExternalProject_Addコマンドとして含め、依存関係を mongo-c-driver/mongo-cxx-driver とします。

# mongo-c-driver
ExternalProject_Add(mongo-c-driver
        GIT_REPOSITORY https://github.com/mongodb/mongo-c-driver.git
        GIT_TAG r1.12
        CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${EXTERNAL_INSTALL_LOCATION} -DENABLE_AUTOMATIC_INIT_AND_CLEANUP=OFF
#        CMAKE_ARGS -DINCLUDE_DIRECTORIES=${EXTERNAL_INSTALL_LOCATION}/include/libbson-1.0 ${EXTERNAL_INSTALL_LOCATION}/include/libmongoc-1.0
        )

#include_directories(${EXTERNAL_INSTALL_LOCATION}/include/libbson-1.0
#        ${EXTERNAL_INSTALL_LOCATION}/include/libmongoc-1.0)
#link_directories(${EXTERNAL_INSTALL_LOCATION}/lib)

include_directoriesここでのコマンドは、mongoc の cmake 構成ファイルで機能するため、実際には必要ありません。ただし、確かに、私もコメントなしでチェックしました。

したがって、mongo-c-driver からのインクルードは、次にインクルードされる外部プロジェクトである mangrove に必要です。

現在のプロジェクトのインクルード パスに存在するいくつかのインクルード ファイルが見つからない c++ エラーが原因で失敗します。したがって、含まれている外部プロジェクトは、以前に別の外部プロジェクトによって追加された現在の CMake インクルードを使用していないようです

# mangrove
ExternalProject_Add(mangrove
        GIT_REPOSITORY https://github.com/aospan/mangrove.git
        CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${EXTERNAL_INSTALL_LOCATION} -DCMAKE_INCLUDE_DIRECTORIES_BEFORE=${EXTERNAL_INSTALL_LOCATION}/include/libbson-1.0
        )

ExternalProject_Add_StepDependencies(mangrove build mongo-c-driver mongo-cxx-driver)

include_directories(${EXTERNAL_INSTALL_LOCATION}/include/libbson-1.0
        ${EXTERNAL_INSTALL_LOCATION}/include/libmongoc-1.0)
link_directories(${EXTERNAL_INSTALL_LOCATION}/lib)

include_directoriesに含まれる CMake ベースのプロジェクトには、スクリプト内は影響しないようですExternalProject_Add

それらのインクルードパスを外部プロジェクトに渡すテクニックはありますか?

4

3 に答える 3