CMake - Как наследовать статические библиотеки включений и зависимостей? - PullRequest
0 голосов
/ 28 ноября 2018

Я собираюсь связать свою статическую библиотеку с некоторыми дополнительными зависимостями (которые установлены в системе), а затем использовать эту библиотеку, но моя IDE говорит «Нет такого файла или каталога» в наследуемых включениях, как это:

CMakeLists.txt моей библиотеки:

find_package(lib1 REQUIRED)
target_link_libraries(${MY_MEGA_LIB_NAME} lib1::lib1)
target_include_directories(${MY_MEGA_LIB_NAME} PUBLIC ${LIB1_INCLUDE_DIR})

find_package(lib2 REQUIRED)
target_link_libraries(${MY_MEGA_LIB_NAME} lib2::lib2)
target_include_directories(${MY_MEGA_LIB_NAME} PUBLIC ${LIB2_INCLUDE_DIR})

CMakeLists.txt проекта, который использует мою библиотеку:

find_library(${CMAKE_BINARY_DIR}/lib/ MyMegaLib.a)
target_include_directories(${MY_MEGA_PROJECT} ${PROJECT_SOURCE_DIR}/include/MyMegaLib}

Ошибки такие:

fatal error: lib1.h: No such file or directory
 #include <lib1.h>

Что я должен сделать для правильного наследования включений?

_ Полная иерархия моих библиотек и исполняемых файлов:

pre-lib1, pre-lib2
^^
lib1 (installed at the CMAKE_INSTALL_PREFIX path)
^
MyMegaLib (static library)
^
MyProject(static library and an executable MyProject_tests)

Так что на самом деле я получаю ошибки о pre-lib1 и pre-lib2о заголовках RE2 (prelib1.h: такого файла или каталога нет, preli2.h: такого файла или каталога нет), когда я пытаюсь создать 'MyProject_tests.

1 Ответ

0 голосов
/ 28 ноября 2018

Насколько я могу судить, в моем проекте это вызов TARGET_LINK_LIBRARIES, который извлекает экспортируемые в библиотеку вещи - разве у вас нет такого в вашем случае?Что-то вроде:

TARGET_LINK_LIBRARIES(${MY_MEGA_PROJECT} ${MY_MEGA_LIB_NAME})

Но это при указании включения каталогов / библиотек в один и тот же запуск CMake.

Когда вы хотите повторно использовать сборку библиотеки в другом запуске CMake, вам, вероятно, придется импортировать / экспортировать эти цели и их каталоги / зависимости от библиотек и т. Д. Библиотеки, которые обычно генерируют некоторые файлы .cmake в своих каталогах build / install, которые предоставляют эти цели.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...