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