Spec-Zone.ru › CMake 3.7

add_library

  • Библиотеки по умолчанию
  • Импортированные библиотеки
  • Библиотеки объектов
  • Псевдонимы библиотек
  • Библиотеки интерфейсов

Добавить библиотеку в проект, используя указанные исходные файлы.

Библиотеки по умолчанию

add_library(<name> [STATIC | SHARED | MODULE]
            [EXCLUDE_FROM_ALL]
            source1 [source2 ...])

Добавляет целевую библиотеку, названную <name>, для построения из исходных файлов, перечисленных в вызове команды. <name> соответствует логическому имени целевой библиотеки и должно быть уникальным в рамках проекта. Файл созданной библиотеки формируется на основе конвенций целевой платформы (например, lib<name>.a или <name>.lib).

Можно указать STATIC, SHARED, или MODULE, чтобы задать тип создаваемой библиотеки. STATIC библиотеки — это архивы объектных файлов, используемые при компоновке других целей. SHARED библиотеки компонуются динамически и загружаются во время выполнения. MODULE библиотеки — это плагины, которые не компонуются в другие целевые библиотеки, но могут загружаться динамически во время выполнения с помощью функций типа dlopen. Если тип не указан явно, тип определяется как STATIC или SHARED, в зависимости от того, равно ли текущее значение переменной BUILD_SHARED_LIBS ON. Для SHARED и MODULE библиотек свойство целевого объекта POSITION_INDEPENDENT_CODE устанавливается в ON автоматически. SHARED библиотеку можно пометить свойством FRAMEWORK для создания фреймворка в OS X.

Если библиотека не экспортирует какие-либо символы, она не должна объявляться как SHARED библиотека. Например, DLL ресурсов Windows или DLL управляемого C++/CLI, не экспортирующая неуправляемые символы, должна быть MODULE библиотекой. Это происходит потому, что CMake ожидает, что SHARED библиотека всегда будет иметь связанную библиотеку импорта в Windows.

По умолчанию файл библиотеки создаётся в каталоге сборки, соответствующем каталогу исходных файлов, в котором была вызвана команда. Смотрите документацию свойств ARCHIVE_OUTPUT_DIRECTORY, LIBRARY_OUTPUT_DIRECTORY и RUNTIME_OUTPUT_DIRECTORY целевого объекта, чтобы изменить это расположение. Смотрите документацию свойства OUTPUT_NAME целевого объекта, чтобы изменить часть <name> конечного имени файла.

Если EXCLUDE_FROM_ALL указано, соответствующее свойство будет установлено для создаваемой цели. Смотрите документацию свойства EXCLUDE_FROM_ALL целевого объекта для получения подробностей.

Аргументы исходных файлов для add_library могут использовать «генераторские выражения» с синтаксисом $<...>. Смотрите руководство cmake-generator-expressions(7) для доступных выражений. Смотрите руководство cmake-buildsystem(7) для получения более подробной информации об определении свойств системы сборки.

Импортированные библиотеки

add_library(<name> <SHARED|STATIC|MODULE|UNKNOWN> IMPORTED
            [GLOBAL])

Целевая импортированная библиотека ссылается на файл библиотеки, расположенный вне проекта. Для неё не генерируются правила построения, и свойство целевого объекта IMPORTED установлено в True. Имя цели имеет область действия в каталоге, в котором оно создано, и ниже, но параметр GLOBAL расширяет видимость. К ней можно обращаться, как к любой целевой библиотеке, построенной внутри проекта. IMPORTED библиотеки удобны для ссылки из команд, таких как target_link_libraries(). Подробности импортированной библиотеки задаются путём установки свойств, имена которых начинаются с IMPORTED_ и INTERFACE_. Наиболее важным таким свойством является IMPORTED_LOCATION (и его вариант для каждой конфигурации IMPORTED_LOCATION_<CONFIG>), которое указывает расположение основного файла библиотеки на диске. Смотрите документацию свойств IMPORTED_* и INTERFACE_* для получения дополнительной информации.

Библиотеки объектов

add_library(<name> OBJECT <src>...)

Создаёт библиотеку объектов. Библиотека объектов компилирует исходные файлы, но не архивирует и не компонует их объектные файлы в библиотеку. Вместо этого другие цели, созданные с помощью add_library() или add_executable(), могут ссылаться на объекты, используя выражение вида $<TARGET_OBJECTS:objlib>, где objlib — имя библиотеки объектов. Например:

add_library(... $<TARGET_OBJECTS:objlib> ...)
add_executable(... $<TARGET_OBJECTS:objlib> ...)

включает объектные файлы objlib в библиотеку и исполняемый файл вместе с объектами, скомпилированными из их собственных исходных файлов. Библиотеки объектов могут содержать только файлы, которые компилируются, заголовки файлов и другие файлы, которые не влияют на компоновку обычной библиотеки (например, .txt). Они могут содержать пользовательские команды, генерирующие такие исходные файлы, но не команды PRE_BUILD, PRE_LINK, или POST_BUILD. Библиотеки объектов не могут импортироваться, экспортироваться, устанавливаться или компоноваться. Некоторые системы сборки могут не поддерживать цели, состоящие только из объектных файлов, поэтому рекомендуется добавить по крайней мере один настоящий исходный файл в любую цель, которая ссылается на $<TARGET_OBJECTS:objlib>.

Псевдонимы библиотек

add_library(<name> ALIAS <target>)

Создаёт целевые псевдонимы, так что <name> может использоваться для ссылки на <target> в последующих командах. Псевдоним <name> не появляется в генерируемой системе сборки как целевой объект make. Псевдоним <target> не может быть импортированной целью или ALIAS. Целевые псевдонимы могут использоваться в качестве компонуемых целей и в качестве целей для чтения свойств. Их также можно проверить на существование с помощью обычной подкоманды if(TARGET). Псевдоним <name> не может быть использован для изменения свойств <target>, то есть его нельзя использовать в качестве операнда для set_property(), set_target_properties(), target_link_libraries() и т. д. Целевая цель-псевдоним не может быть установлена или экспортирована.

Библиотеки интерфейсов

add_library(<name> INTERFACE [IMPORTED [GLOBAL]])

Создаёт библиотеку интерфейсов. Целевая библиотека интерфейса не создаёт непосредственно выходные данные сборки, хотя к ней могут быть применены свойства, и её можно установить, экспортировать и импортировать. Обычно свойства INTERFACE_* заполняются на целевой библиотеке интерфейса с помощью команд:

  • set_property(),
  • target_link_libraries(INTERFACE),
  • target_include_directories(INTERFACE),
  • target_compile_options(INTERFACE),
  • target_compile_definitions(INTERFACE), и
  • target_sources(INTERFACE),

а затем она используется как аргумент к target_link_libraries(), как и любая другая цель.

END_OF_DOCUMENT_MARKER ```

Также может быть создан INTERFACE Импортированный целевой объект. IMPORTED целевой объект библиотеки ссылается на библиотеку, определённую за пределами проекта. Имя целевого объекта имеет область действия в каталоге, в котором он создан, и ниже, но GLOBAL опция расширяет видимость. К нему можно обратиться как к любому целевому объекту, построенному внутри проекта. IMPORTED библиотеки полезны для удобного обращения из команд, таких как target_link_libraries().

© 2000–2019 Kitware, Inc. and Contributors
Licensed under the BSD 3-clause License.
https://cmake.org/cmake/help/v3.7/command/add_library.html

Spec-Zone.ru

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