CMake FetchContent не копирует библиотеки - PullRequest
0 голосов
/ 14 июня 2019

Я использую CMake FetchContent для загрузки и сборки сторонней библиотеки (в данном случае realsense2). После опробования примера googletest из официальной документации (https://cmake.org/cmake/help/v3.11/module/FetchContent.html) я был поражен тем, насколько легко это работает. Включение заголовков было сделано волшебным образом. Теперь с realsense2 SDK у меня проблема.

Мне нужно добавить дополнительную команду include_directories, например так:

FetchContent_Declare(
realsense2
GIT_REPOSITORY https://github.com/IntelRealSense/librealsense.git
GIT_TAG        v2.23.0
)
FetchContent_MakeAvailable(realsense2)
FetchContent_GetProperties(realsense2)
if(NOT realsense2_POPULATED)
    FetchContent_Populate(realsense2)
    add_subdirectory(${realsense2_SOURCE_DIR} ${realsense2_BINARY_DIR})
endif()
//I should not be required to do this according to documentation
include_directories(${realsense2_SOURCE_DIR}/include)

Если я этого не сделаю, некоторые заголовки не найдены. Любые предложения по этой проблеме?

РЕДАКТИРОВАТЬ: Чтобы уточнить, вот как я добавил библиотеки:

target_link_libraries(TestExe gtest gtest_main)

и другие точно такие же, но на этот раз это не exe, это dll

add_library(TestLib SHARED ${TestLib_HEADERS} ${TestLib_SOURCES} )
target_link_libraries(TestLib realsense2)

На данный момент меня больше беспокоит, почему мне не нужно добавлять какие-либо включения для googletest framework

1 Ответ

1 голос
/ 14 июня 2019

Основное назначение FetchContent - гарантия того, что на момент звонка

add_subdirectory(${Foo_SOURCE_DIR} ${Foo_BINARY_DIR})

«выбранный» проект будет (как источник) в каталоге ${Foo_SOURCE_DIR}.

Как использовать проект, включенный через add_subdirectory, полностью до этого проекта :

  1. В некоторых проектах (включая gtest) цель библиотеки Foo создается "современным" способом CMake, связывая свойства с ним с помощью target_include_directories и других команд. Поэтому для использования этой библиотеки достаточно вызвать target_link_libraries.

  2. В некоторых других проектах для работы с ними требуются include_directories и target_link_libraries.

  3. Наконец, есть много проектов, которые ... просто не работают, если включены через add_subdirectory. Так что FetchContent имеет небольшой смысл для них.

Лишь небольшое подмножество проектов описывает, как работать с ними с помощью подхода add_subdirectory. И gtest среди них.

Но большинство проектов просто не описывают этот путь. Если вы хотите add_subdirectory один из таких проектов, то вам нужно исследовать внутренности этого проекта, чтобы понять его использование. Или используйте метод проб и ошибок.

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