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.29/variable/BUILD_SHARED_LIBS.html