cmake include_directories передается в externaproject_add

Мне нужно использовать мангровое дерево (Mongo ODM lib поверх mongo-c-driver и mongo-cxx-driver) и включить это в мой проект как CMake ExternalProject_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 команда здесь на самом деле не требуется, потому что файл конфигурации cmake mongoc делает эту работу. Впрочем, наверняка я тоже проверил с комментариями тоже.

Так что включения от mongo-c-driver требуются следующим включенным внешним проектом — мангровым лесом.

Что не удается из-за ошибки 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,

Есть ли способ передать эти включенные пути во внешний проект?

0

Решение

Вы используете неправильный макрос. CMAKE_INCLUDE_DIRECTORIES_BEFORE только указывает на то, как include-directories работа и является флаг.

Нет другого способа установить правильные переменные так, чтобы внешний CMakeLists.txt использовал find_path заполнить путь к bson.h, Если это не так, то я предлагаю вам патч CMakeLists.txt для использования find_path и сделать запрос на получение.

Редактировать:

Кажется, что у мангрового проекта есть способ установить все это с ENABLE_BSON, Вы можете установить BSON_VERSION, BSON_INCLUDE_DIRS а также BSON_LIBRARIES вручную, если по умолчанию AUTO не работает

1

Другие решения

Как указано в других ответах, вы не можете передать их во включенные mangrove проект и что внешние проекты и текущий проект все независимы друг от друга.

Это кажется половиной проблемы. Похоже, вы пытаетесь использовать mongo-c-driver предоставлять libbson, Но mangrove использует:

set(LIBBSON_REQUIRED_VERSION 1.7.0)
set(LIBBSON_REQUIRED_ABI_VERSION 1.0)
find_package(LibBSON ${LIBBSON_REQUIRED_VERSION} REQUIRED)

Что не совсем понятно, если find_package работает в режиме модуля или конфигурации и каковы его результаты. Но для этого работают успешно libbson должен быть построен, когда mongo-c-driver построен так, что find_package Можно найти библиотеку и настроить пути включения и линию связи.

Кажется, что mangrove нашел то, что позволило find_package не подвести, но не заселить ${LIBBSON_INCLUDE_DIRS} с правильным путём включения, который вызвал упомянутую вами ошибку компиляции.

Без подробностей трудно дать вам подробный ответ, но вы должны убедиться, что find_package команды в mangrove правильно работают со встроенным и не установленным libbson или установить libbson в месте, совместимом с find_package команда, используемая mangrove,

0

По вопросам рекламы [email protected]