Spec-Zone.ru › CMake 3.30

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.30/command/target_sources.html

Spec-Zone.ru

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