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:
Для наборов файлов типа 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.29/command/target_sources.html