Spec-Zone.ru › CMake 3.24

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) для обсуждения дополнительной заботы, которая должна быть принята при указании требований к использованию при создании пакетов для распространения.

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

Spec-Zone.ru

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