target_include_directories
Добавляет каталоги включаемых файлов к цели.
target_include_directories(<target> [SYSTEM] [AFTER|BEFORE]
{INTERFACE|PUBLIC|PRIVATE} <dir...
[{INTERFACE|PUBLIC|PRIVATE} <dir>...]...)
Задает каталоги включаемых файлов, используемые при компиляции указанной цели. Именованная <target> должна быть создана командой, например add_executable() или add_library(), и не должна быть целью ALIAS.
Явно указывая 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–2026 Kitware, Inc. and Contributors
Licensed under the BSD 3-clause License.
https://cmake.org/cmake/help/latest/command/target_include_directories.html