target_sources
Добавлено в версии 3.1.
Добавление исходных файлов в цель.
target_sources(<target>
{INTERFACE|PUBLIC|PRIVATE} <source>...
[{INTERFACE|PUBLIC|PRIVATE} <source>...]...)
Задает исходные файлы, используемые при сборке цели и/или ее зависимых целей. Именованная <target> должна быть создана такой командой, как add_executable(), add_library() или add_custom_target() и не должна быть целью ALIAS. Элементы <source> могут использовать generator expressions.
Добавлено в версии 3.20: <target> может быть пользовательской целью.
Ключевые слова INTERFACE, PUBLIC и PRIVATE обязательны для указания области видимости путей к исходным файлам (<source>...), следующих за ними. Исходные файлы 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, один или несколько базовых каталогов и файлы в этих каталогах.
Изменено в версии 4.4: Файл может входить не более чем в один набор файлов цели, не являющийся HEADERS. См. политику CMP0211.
Допустимые типы:
HEADERS
Исходные файлы, предназначенные для использования с помощью механизма #include языка.
-
SOURCES -
Добавлено в версии 4.4.
Задает исходные файлы, используемые при сборке цели и/или ее зависимых целей. При области видимости
PRIVATEиPUBLICфайлы<files>заполняют свойствоSOURCESцели<set>; они используются при сборке самой цели. При области видимостиPUBLICиINTERFACEфайлы<files>заполняют свойствоINTERFACE_SOURCESцели<set>; они используются при сборке зависимых целей. Исходные файлы, заданные свойствомINTERFACE_SOURCES, транзитивно передаются всем зависимым целям. -
CXX_MODULES -
Добавлено в версии 3.28.
Исходные файлы, содержащие модули интерфейса C++ или единицы разделов (то есть использующие ключевое слово
export). Для этого типа набора файлов область видимостиINTERFACEзапрещена, кроме целейIMPORTED.
Необязательные наборы файлов по умолчанию именуются в соответствии с их типом. Цель не может быть пользовательской целью или, для типов HEADERS и CXX_MODULES, целью FRAMEWORK.
Файлы в наборах PRIVATE или PUBLIC помечаются как исходные для интеграции со средами разработки. Кроме того, для файлов в наборах HEADERS устанавливается значение TRUE свойства HEADER_FILE_ONLY. Файлы в наборах 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:
Для наборов файлов типа SOURCES:
Для наборов файлов типа 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–2026 Kitware, Inc. and Contributors
Licensed under the BSD 3-clause License.
https://cmake.org/cmake/help/latest/command/target_sources.html