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