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