Как добавить библиотеки, установленные с ExternalProject_Add, к целевым включает

Я пытаюсь включить внешние библиотеки в проект cmake через ExternalProject_Add, Чтобы опробовать эту функцию, я создал минимальный рабочий пример, включающий добавление pugixml в проект с ExternalProject_Add, Однако у меня возникают проблемы с поиском способа добавления заголовочных файлов библиотеки из локальной установки внешнего проекта (т. Е. Заголовков pugixml) в путь включения проекта.

Дерево проекта минимального рабочего примера организовано следующим образом:

.
├── build
├── CMakeLists.txt
└── src
├── CMakeLists.txt
└── main.cpp

В этом дереве проекта build ссылается на каталог сборки и путь, по которому вызывается cmake для генерации сборки.

Содержание ./CMakeLists.txt являются следующими:

cmake_minimum_required(VERSION 3.0)

include(ExternalProject)

ExternalProject_Add(pugixml
GIT_REPOSITORY https://github.com/zeux/pugixml.git
INSTALL_DIR ${PROJECT_BINARY_DIR}/extern_install/pugixml
CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=<INSTALL_DIR>
)

add_subdirectory(src)

В приведенном выше примере я добавил pugixml в качестве внешнего проекта, который должен быть установлен в двоичном каталоге проекта, файл которого будет использоваться исполняемым файлом, хранящимся в ./src, Таким образом, содержание ./src/CMakeLists.txt являются:

project(foo)

add_executable(foo main.cpp)
target_link_libraries(foo ${pugixml_LIBRARIES})
include_directories(${pugixml_INCLUDE_DIR}) # this part doesn't work

Это именно та часть, которая у меня возникла. Я предположил, что после добавления и установки внешнего проекта ExternalProject_Add определил бы некоторые вспомогательные библиотеки, чтобы помочь ссылаться на файлы библиотеки и включать каталоги. Однако это не работает. Кто-нибудь знает, как правильно использовать ExternalProject_Add включить внешние библиотеки?

0

Решение

К сожалению, это не будет работать вообще. Сборка внешнего проекта выполняется во время сборки, а не во время настройки / генерации CMake. Подсказка The ExternalProject_Add function creates a custom target to drive download, update/patch, configure, build, install and test steps of an external project: (из CMake)

Следовательно, вам придется определить все переменные самостоятельно. Смотрите также: CMake — ссылка на библиотеку, загруженную из ExternalProject_add () (Я бы на самом деле пометил это как дубликат связанного вопроса, так как проблема та же)

Кстати, мне также не нравится, как это было сделано. Таким образом, нельзя просто использовать find_package и т.п.

Предполагаемый способ использовать это «проект супер-сборки»: определить 1 CMakeLists, где у вас есть только ExternalProject_Adds для всех зависимостей и вашего проекта. Тогда это будет работать с find_package,

0

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

Других решений пока нет …

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