Spec-Zone.ru › CMake

target_sources

Добавлено в версии 3.1.

Добавление исходных файлов в цель.

target_sources(<target>
  {INTERFACE|PUBLIC|PRIVATE} <source>...
  [{INTERFACE|PUBLIC|PRIVATE} <source>...]...)

Задает исходные файлы, используемые при сборке цели и/или ее зависимых целей. Именованная <target> должна быть создана такой командой, как add_executable(), add_library() или add_custom_target() и не должна быть целью ALIAS. Элементы <source> могут использовать generator expressions.

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

Ключевые слова INTERFACE, PUBLIC и PRIVATE обязательны для указания области видимости путей к исходным файлам (<source>...), следующих за ними. Исходные файлы 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 PRIVATE "$<$<CONFIG:Debug>:dbgsrc.cpp>")

# CORRECT: absolute path used inside the generator expression
target_sources(MyTarget PRIVATE "$<$<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, один или несколько базовых каталогов и файлы в этих каталогах.

Изменено в версии 4.4: Файл может входить не более чем в один набор файлов цели, не являющийся HEADERS. См. политику CMP0211.

Допустимые типы:

HEADERS

Исходные файлы, предназначенные для использования с помощью механизма #include языка.

SOURCES

Добавлено в версии 4.4.

Задает исходные файлы, используемые при сборке цели и/или ее зависимых целей. При области видимости PRIVATE и PUBLIC файлы <files> заполняют свойство SOURCES цели <set>; они используются при сборке самой цели. При области видимости PUBLIC и INTERFACE файлы <files> заполняют свойство INTERFACE_SOURCES цели <set>; они используются при сборке зависимых целей. Исходные файлы, заданные свойством INTERFACE_SOURCES, транзитивно передаются всем зависимым целям.

CXX_MODULES

Добавлено в версии 3.28.

Исходные файлы, содержащие модули интерфейса C++ или единицы разделов (то есть использующие ключевое слово export). Для этого типа набора файлов область видимости INTERFACE запрещена, кроме целей IMPORTED.

Необязательные наборы файлов по умолчанию именуются в соответствии с их типом. Цель не может быть пользовательской целью или, для типов HEADERS и CXX_MODULES, целью FRAMEWORK.

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

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

FILE_SET <set>

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

TYPE <type>

Каждый набор файлов связан с определенным типом файлов. Можно использовать только указанные выше типы; указание любого другого типа считается ошибкой. В особом случае, когда имя набора совпадает с одним из типов, тип можно не указывать, а аргументы 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) устанавливает следующие свойства цели, однако обычно их не следует изменять напрямую:

Для наборов файлов типа HEADERS:

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

Для наборов файлов типа SOURCES:

  • SOURCE_SETS
  • INTERFACE_SOURCE_SETS
  • SOURCE_SET
  • SOURCE_SET_<NAME>
  • SOURCE_DIRS
  • SOURCE_DIRS_<NAME>

Для наборов файлов типа CXX_MODULES:

  • CXX_MODULE_SETS
  • INTERFACE_CXX_MODULE_SETS
  • CXX_MODULE_SET
  • CXX_MODULE_SET_<NAME>
  • CXX_MODULE_DIRS
  • CXX_MODULE_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> и добавляются к этому свойству.

См. также

  • add_executable()
  • add_library()
  • target_compile_definitions()
  • target_compile_features()
  • target_compile_options()
  • target_include_directories()
  • target_link_libraries()
  • target_link_directories()
  • target_link_options()
  • target_precompile_headers()

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

Spec-Zone.ru

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