Spec-Zone.ru › CMake 3.29

target_include_directories

Добавление каталогов заголовков к целевому объекту.

target_include_directories(<target> [SYSTEM] [AFTER|BEFORE]
  <INTERFACE|PUBLIC|PRIVATE> [items1...]
  [<INTERFACE|PUBLIC|PRIVATE> [items2...] ...])

Указывает каталоги заголовков, которые следует использовать при компиляции заданного целевого объекта. Названный <target> объект должен быть создан командой, такой как add_executable() или add_library(), и не должен быть целевым объектом-псевдонимом.

Используя AFTER или BEFORE, вы можете выбрать добавление или вставку в начало, независимо от значения по умолчанию.

Ключевые слова INTERFACE, PUBLIC и PRIVATE необходимы для указания области действия следующих аргументов. Элементы PRIVATE и PUBLIC будут заполнять свойство INCLUDE_DIRECTORIES целевого объекта <target>. Элементы PUBLIC и INTERFACE будут заполнять свойство INTERFACE_INCLUDE_DIRECTORIES целевого объекта <target>. Следующие аргументы определяют каталоги заголовков.

В версии 3.11: Возможность установки INTERFACE элементов для импортированных целевых объектов.

Повторные вызовы для одного и того же <target> добавляют элементы в порядке вызова.

Если указано SYSTEM, компилятору будет сообщено, что каталоги предназначены для системных каталогов заголовков на некоторых платформах. Это может повлиять на подавление предупреждений или пропуск включенных заголовков при расчете зависимостей (см. документацию компилятора). Кроме того, системные каталоги заголовков будут просматриваться после обычных каталогов заголовков независимо от указанного порядка.

Если SYSTEM используется вместе с PUBLIC или INTERFACE, свойство целевого объекта INTERFACE_SYSTEM_INCLUDE_DIRECTORIES будет заполнено указанными каталогами.

Аргументы для target_include_directories могут использовать выражения генератора с синтаксисом $<...>. См. руководство cmake-generator-expressions(7) для доступных выражений. См. руководство cmake-buildsystem(7) для получения дополнительной информации об определении свойств системы сборки.

Указанные каталоги заголовков могут быть абсолютными или относительными путями. Относительный путь будет интерпретирован относительно текущей директории исходного кода (т.е. CMAKE_CURRENT_SOURCE_DIR) и преобразован в абсолютный путь перед сохранением в соответствующем свойстве целевого объекта. Если путь начинается с выражения генератора, он всегда будет считаться абсолютным путем (за исключением одного случая, указанного ниже) и будет использоваться без изменений.

Требования к использованию каталогов заголовков часто различаются между деревом сборки и деревом установки. Выражения генератора BUILD_INTERFACE и INSTALL_INTERFACE могут использоваться для описания отдельных требований к использованию, основанных на месте использования. Относительные пути разрешены в выражении INSTALL_INTERFACE и интерпретируются относительно префикса установки. Относительные пути не должны использоваться в выражениях BUILD_INTERFACE, так как они не будут преобразованы в абсолютные. Например:

target_include_directories(mylib PUBLIC
  $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include/mylib>
  $<INSTALL_INTERFACE:include/mylib>  # <prefix>/include/mylib
)

Создание переносимых пакетов

Обратите внимание, что не рекомендуется заполнять свойство INSTALL_INTERFACE INTERFACE_INCLUDE_DIRECTORIES целевого объекта абсолютными путями к каталогам заголовков зависимостей. Это встроит в установленные пакеты пути к каталогам заголовков зависимостей в соответствии с машиной, на которой пакет был создан.

Свойство INSTALL_INTERFACE INTERFACE_INCLUDE_DIRECTORIES подходит только для указания необходимых каталогов заголовков для заголовков, предоставляемых самим целевым объектом, а не для тех, которые предоставляются транзитивными зависимостями, перечисленными в свойстве целевого объекта INTERFACE_LINK_LIBRARIES. Эти зависимости должны быть целевыми объектами, которые сами указывают свои расположения заголовков в INTERFACE_INCLUDE_DIRECTORIES.

См. раздел «Создание переносимых пакетов» в руководстве cmake-packages(7) для обсуждения дополнительных мер предосторожности, которые необходимо принять при указании требований к использованию при создании пакетов для распространения.

См. также

  • include_directories()
  • target_compile_definitions()
  • target_compile_features()
  • target_compile_options()
  • target_link_libraries()
  • target_link_directories()
  • target_link_options()
  • target_precompile_headers()
  • target_sources()

© 2000–2024 Kitware, Inc. and Contributors
Licensed under the BSD 3-clause License.
https://cmake.org/cmake/help/v3.29/command/target_include_directories.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API