Spec-Zone.ru › CMake 3.28

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 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, один или несколько базовых каталогов и файлы в этих каталогах. Допустимые типы включают:

HEADERS

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

CXX_MODULES

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

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

Необязательные наборы файлов по умолчанию названы в соответствии со своим типом. Целевой объект не может быть пользовательским целевым объектом или 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. Единственные предварительно определенные имена наборов — те, которые соответствуют допустимым типам. Все остальные имена наборов не должны начинаться с заглавной буквы или символа подчеркивания.

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>

Для наборов файлов типа 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–2024 Kitware, Inc. and Contributors
Licensed under the BSD 3-clause License.
https://cmake.org/cmake/help/v3.28/command/target_sources.html

Spec-Zone.ru

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