Spec-Zone.ru › CMake 3.31

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

Spec-Zone.ru

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