Spec-Zone.ru › CMake 3.26

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 целевых объектов.

CXX_MODULE_HEADER_UNITS

Примечание

Экспериментальная функция. Включена с помощью CMAKE_EXPERIMENTAL_CXX_MODULE_CMAKE_API

Источники заголовков C++, которые могут импортироваться другим кодом C++ источников. Этот тип набора файлов может не иметь область действия 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:

  • HEADER_SETS
  • INTERFACE_HEADER_SETS
  • HEADER_SET
  • HEADER_SET_<NAME>
  • HEADER_DIRS
  • HEADER_DIRS_<NAME>

Для наборов файлов типа CXX_MODULES:

  • CXX_MODULE_SETS
  • INTERFACE_CXX_MODULE_SETS
  • CXX_MODULE_SET
  • CXX_MODULE_SET_<NAME>
  • CXX_MODULE_DIRS
  • CXX_MODULE_DIRS_<NAME>

Для наборов файлов типа CXX_MODULE_HEADER_UNITS:

  • CXX_MODULE_HEADER_UNIT_SETS
  • INTERFACE_CXX_MODULE_HEADER_UNIT_SETS
  • CXX_MODULE_HEADER_UNIT_SET
  • CXX_MODULE_HEADER_UNIT_SET_<NAME>
  • CXX_MODULE_HEADER_UNIT_DIRS
  • CXX_MODULE_HEADER_UNIT_DIRS_<NAME>

Свойства целевых свойств, относящиеся к каталогам включения, также изменяются target_sources(FILE_SET) следующим образом:

INCLUDE_DIRECTORIES

Если TYPE — HEADERS или CXX_MODULE_HEADER_UNITS, а область набора файлов — PRIVATE или PUBLIC, все BASE_DIRS набора файлов заключены в $<BUILD_INTERFACE> и добавляются к этому свойству.

INTERFACE_INCLUDE_DIRECTORIES

Если TYPE — HEADERS или CXX_MODULE_HEADER_UNITS, а область набора файлов — 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–2023 Kitware, Inc. and Contributors
Licensed under the BSD 3-clause License.
https://cmake.org/cmake/help/v3.26/command/target_sources.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API