Spec-Zone.ru › CMake 3.31

BUILD_SHARED_LIBS

Указать add_library() по умолчанию использовать SHARED библиотеки, а не STATIC библиотеки, при вызове без явного указания типа библиотеки.

Вызовы add_library() без явного указания типа библиотеки проверяют текущее значение переменной BUILD_SHARED_LIBS. Если оно истинно, то тип библиотеки по умолчанию — SHARED. В противном случае, по умолчанию — STATIC.

Например, код:

add_library(example ${sources})

ведет себя так, как если бы был написан

if(BUILD_SHARED_LIBS)
  add_library(example SHARED ${sources})
else()
  add_library(example STATIC ${sources})
endif()

CMake по умолчанию не определяет BUILD_SHARED_LIBS, но проекты часто создают запись кэша для неё, используя команду option():

option(BUILD_SHARED_LIBS "Build using shared libraries" ON)

Это предоставляет переключатель, которым пользователи могут управлять, например, с помощью cmake -D. Если добавлять такой параметр в проект, делайте это в файле верхнего уровня CMakeLists.txt, перед любыми вызовами add_library(). Обратите внимание, что если вы непосредственно включаете внешние зависимости в сборку, например, с помощью FetchContent или прямым вызовом add_subdirectory(), и одна из этих зависимостей содержит вызов option(BUILD_SHARED_LIBS ...), проект верхнего уровня также должен вызвать option(BUILD_SHARED_LIBS ...) до включения зависимостей. Отсутствие этого может привести к различному поведению при первом и последующих запусках CMake.

© 2000–2024 Kitware, Inc. and Contributors
Licensed under the BSD 3-clause License.
https://cmake.org/cmake/help/v3.31/variable/BUILD_SHARED_LIBS.html

Spec-Zone.ru

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