Spec-Zone.ru › CMake 3.23

target_sources

Новое в версии 3.1.

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

target_sources(<target>
  <INTERFACE|PUBLIC|PRIVATE> [items1...]
  [<INTERFACE|PUBLIC|PRIVATE> [items2...] ...])

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

Новое в версии 3.20: <target> может быть пользовательским целевым объектом.

Ключевые слова INTERFACE, PUBLIC и PRIVATE необходимы для указания области действия путей к исходным файлам (<items>), которые следуют за ними. PRIVATE и PUBLIC элементы заполнят свойство SOURCES <target>, которые используются при построении самого целевого объекта. PUBLIC и INTERFACE элементы заполнят свойство INTERFACE_SOURCES <target>, которые используются при построении зависимостей. Целевой объект, созданный с помощью add_custom_target(), может иметь только область действия PRIVATE.

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

Новое в версии 3.3: Разрешить экспорт целевых объектов с INTERFACE_SOURCES.

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

Изменено в версии 3.13: Относительные пути к исходным файлам интерпретируются как относительные к текущей директории исходных кодов (т.е. CMAKE_CURRENT_SOURCE_DIR). См. политику CMP0076.

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

# WRONG: starts with generator expression, but relative path used
target_sources(MyTarget "$<$<CONFIG:Debug>:dbgsrc.cpp>")

# CORRECT: absolute path used inside the generator expression
target_sources(MyTarget "$<$<CONFIG:Debug>:${CMAKE_CURRENT_SOURCE_DIR}/dbgsrc.cpp>")

См. руководство cmake-buildsystem(7) для получения дополнительной информации о настройке свойств системы построения.

Наборы файлов

Новое в версии 3.23.

target_sources(<target>
  [<INTERFACE|PUBLIC|PRIVATE>
   [FILE_SET <set> [TYPE <type>] [BASE_DIRS <dirs>...] [FILES <files>...]]...
  ]...)

Добавляет набор файлов к целевому объекту или добавляет файлы в существующий набор файлов. Целевые объекты имеют ноль или более именованных наборов файлов. Каждый набор файлов имеет имя, тип, область действия INTERFACE, PUBLIC, или PRIVATE, один или более базовых каталогов и файлы в этих каталогах. Единственный допустимый тип — HEADERS. Необязательные наборы файлов по умолчанию имеют имена, соответствующие их типу. Целевой объект не может быть пользовательским целевым объектом или FRAMEWORK целевым объектом.

Файлы в наборах файлов PRIVATE или PUBLIC помечаются как исходные файлы для целей интеграции с IDE. Кроме того, для файлов в наборах файлов HEADERS свойство HEADER_FILE_ONLY устанавливается в значение TRUE. Файлы в наборах файлов INTERFACE или PUBLIC могут быть установлены с помощью команды install(TARGETS) и экспортированы с помощью команд install(EXPORT) и export().

Каждая запись target_sources(FILE_SET) начинается с INTERFACE, PUBLIC, или PRIVATE и принимает следующие аргументы:

FILE_SET <set>

Имя набора файлов для создания или добавления. Оно должно содержать только буквы, цифры и символы подчеркивания. Имена, начинающиеся с заглавной буквы, зарезервированы для встроенных наборов файлов, определенных в CMake. Единственное предопределённое имя набора — HEADERS. Все остальные имена наборов не должны начинаться с заглавной буквы или символа подчеркивания.

TYPE <type>

Каждый набор файлов связан с определенным типом файла. HEADERS — единственный определенный тип в настоящее время, и указание чего-либо другого является ошибкой. В качестве специального случая, если имя набора файлов — HEADERS, тип не нужно указывать, и аргументы TYPE <type> можно опустить. Для всех остальных имён наборов файлов TYPE обязателен.

BASE_DIRS <dirs>...

Необязательный список базовых каталогов набора файлов. Любой относительный путь обрабатывается как относительный к текущей директории исходных кодов (т.е. CMAKE_CURRENT_SOURCE_DIR). Если при первом создании набора файлов BASE_DIRS не указаны, добавляется значение CMAKE_CURRENT_SOURCE_DIR. Этот аргумент поддерживает generator expressions.

Два базовых каталога набора файлов не могут быть вложенными друг в друга. Это требование должно выполняться для всех базовых каталогов, добавленных в набор файлов, а не только для тех, которые добавлены в одном вызове target_sources().

FILES <files>...

Необязательный список файлов для добавления в набор файлов. Каждый файл должен находиться в одном из базовых каталогов или в подкаталоге одного из них. Этот аргумент поддерживает generator expressions.

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

Следующие свойства целевого объекта устанавливаются target_sources(FILE_SET), но их обычно не следует изменять напрямую:

  • HEADER_SETS
  • INTERFACE_HEADER_SETS
  • HEADER_SET
  • HEADER_SET_<NAME>
  • HEADER_DIRS
  • HEADER_DIRS_<NAME>

Свойства целевого объекта, связанные с каталогами включения, также изменяются target_sources(FILE_SET) следующим образом:

INCLUDE_DIRECTORIES

Если TYPE равно HEADERS, и область действия набора файлов — PRIVATE или PUBLIC, все BASE_DIRS набора файлов заключены в $<BUILD_INTERFACE> и добавляются к этому свойству.

INTERFACE_INCLUDE_DIRECTORIES

Если TYPE равно HEADERS, и область набора файлов равна INTERFACE или PUBLIC, все BASE_DIRS набора файлов заключены в $<BUILD_INTERFACE> и добавлены к этому свойству.

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

Spec-Zone.ru

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