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