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. Необязательные наборы файлов по умолчанию имеют имена, соответствующие их типу. Целевой объект не может быть пользовательским целевым объектом или целевым объектом 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), но обычно их не следует изменять напрямую:
Свойства целевого объекта, связанные с каталогами включения, также изменяются командой target_sources(FILE_SET) следующим образом:
Если TYPE равно HEADERS, а область применения набора файлов — PRIVATE или PUBLIC, все BASE_DIRS набора файлов заключаются в $<BUILD_INTERFACE> и добавляются к этому свойству.
Если 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.24/command/target_sources.html