2014-01-29 2 views
6

Я разрабатываю проект, состоящий из нескольких разделяемых библиотек и создающий его с помощью CMake. Каждая библиотека построена через add_subdirectory().Использование смежного подпроекта в cmake

Каков наилучший способ добавить все заголовки API библиотеки кулаков в CMakeLists.txt второго?

+0

Здесь я имею в виду случай, когда я не хочу связывать библиотеки, предоставляющие API, мне просто нужно получить доступ к заголовкам – paceholder

ответ

5

Для того, чтобы ответить на steveire полное:

для библиотеки, которая экспортирует API, мы должны написать

target_include_directories("target_with_api" INTERFACE "path_to_api_includes") 

и для библиотеки, которая использует этот API мы пишем

target_include_directories("api_client_target_name" PRIVATE 
      $<TARGET_PROPERTY:"target_with_api",INTERFACE_INCLUDE_DIRECTORIES>) 

, где $<TARGET_PROPERTY:"target_with_api",INTERFACE_INCLUDE_DIRECTORIES>) возвращает нам целевое свойство, присвоенное библиотеке API

+0

Что? Нет! Это неверно. Вам не нужны target_include_directories на узле потребления. Просто используйте target_link_libraries. Это потребляет каталоги include из указанных целей. – steveire

+0

@steveire Извините, я не подчеркнул это - мне не нужно связывать библиотеки, мне просто нужно получить доступ к заголовкам API. В моем конкретном случае библиотеки загружаются вручную – paceholder

+0

http://www.cmake.org/cmake/help/v3.0/manual/cmake-buildsystem.7.html#interface-libraries – steveire

Смежные вопросы