Spec-Zone.ru › CMake 3.6

target_include_directories

Добавление каталогов включения для целевого объекта.

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

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

Если BEFORE указан, содержимое будет добавлено в начало свойства, а не в конец.

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

Указанные каталоги включения могут быть абсолютными или относительными путями. Повторные вызовы для одного и того же целевого объекта добавляют элементы в порядке вызова. Если SYSTEM указан, компилятору будет сообщено, что каталоги предназначены для системных каталогов включения на некоторых платформах (это может повлиять на то, пропустит ли компилятор предупреждения или рассматриваются ли эти установленные системные файлы при расчете зависимостей — см. документацию компилятора). Если SYSTEM используется вместе с PUBLIC или INTERFACE, свойство целевого объекта INTERFACE_SYSTEM_INCLUDE_DIRECTORIES будет заполнено указанными каталогами.

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

Требования к использованию каталогов включения обычно различаются между деревом сборки и деревом установки. Генераторские выражения BUILD_INTERFACE и INSTALL_INTERFACE могут использоваться для описания отдельных требований к использованию в зависимости от места использования. Относительные пути разрешены внутри выражения INSTALL_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–2019 Kitware, Inc. and Contributors
Licensed under the BSD 3-clause License.
https://cmake.org/cmake/help/v3.6/command/target_include_directories.html

Spec-Zone.ru

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