BUILD_SHARED_LIBSΒΆ
Tell add_library()
to default to SHARED
libraries,
instead of STATIC
libraries, when called with no explicit library type.
Calls to add_library()
without any explicit library type check
the current BUILD_SHARED_LIBS
variable value. If it is true, then the
default library type is SHARED
. Otherwise, the default is STATIC
.
For example, the code:
add_library(example ${sources})
behaves as if written
if(BUILD_SHARED_LIBS)
add_library(example SHARED ${sources})
else()
add_library(example STATIC ${sources})
endif()
CMake does not define BUILD_SHARED_LIBS
by default, but projects
often create a cache entry for it using the option()
command:
option(BUILD_SHARED_LIBS "Build using shared libraries" ON)
This provides a switch that users can control, e.g., with cmake -D
.
If adding such an option to the project, do so in the top level
CMakeLists.txt
file, before any add_library()
calls.
Note that if bringing external dependencies directly into the build, such as
with FetchContent
or a direct call to add_subdirectory()
,
and one of those dependencies has such a call to
option(BUILD_SHARED_LIBS ...)
, the top level project must
also call option(BUILD_SHARED_LIBS ...)
before bringing in
its dependencies. Failure to do so can lead to different behavior between the
first and subsequent CMake runs.