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
Примечание
Экспериментальная функция. Управляемая CMAKE_EXPERIMENTAL_CXX_MODULE_CMAKE_API
Источники, содержащие модули или разделы интерфейса 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:
Для наборов файлов типа CXX_MODULES:
CXX_MODULE_SETSINTERFACE_CXX_MODULE_SETSCXX_MODULE_SETCXX_MODULE_SET_<NAME>CXX_MODULE_DIRSCXX_MODULE_DIRS_<NAME>
Свойства целевых объектов, относящиеся к директориям включения, также изменяются target_sources(FILE_SET) следующим образом:
Если TYPE имеет значение HEADERS, а область набора файлов — PRIVATE или PUBLIC, все BASE_DIRS набора файлов будут заключены в $<BUILD_INTERFACE> и добавлены к этому свойству.
Если 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.27/command/target_sources.html