|
|
|
BUILD_SHARED_LIBS
|
|
|
|
-----------------
|
|
|
|
|
|
|
|
Tell :command:`add_library` to default to ``SHARED`` libraries,
|
|
|
|
instead of ``STATIC`` libraries, when called with no explicit library type.
|
|
|
|
|
|
|
|
Calls to :command:`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:
|
|
|
|
|
|
|
|
.. code-block:: cmake
|
|
|
|
|
|
|
|
add_library(example ${sources})
|
|
|
|
|
|
|
|
behaves as if written
|
|
|
|
|
|
|
|
.. code-block:: cmake
|
|
|
|
|
|
|
|
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 :command:`option` command:
|
|
|
|
|
|
|
|
.. code-block:: cmake
|
|
|
|
|
|
|
|
option(BUILD_SHARED_LIBS "Build using shared libraries" ON)
|
|
|
|
|
|
|
|
This provides a switch that users can control, e.g., with :option:`cmake -D`.
|
|
|
|
If adding such an option to the project, do so in the top level
|
|
|
|
``CMakeLists.txt`` file, before any :command:`add_library` calls.
|
|
|
|
Note that if bringing external dependencies directly into the build, such as
|
|
|
|
with :module:`FetchContent` or a direct call to :command:`add_subdirectory`,
|
|
|
|
and one of those dependencies has such a call to
|
|
|
|
:command:`option(BUILD_SHARED_LIBS ...) <option>`, the top level project must
|
|
|
|
also call :command:`option(BUILD_SHARED_LIBS ...) <option>` before bringing in
|
|
|
|
its dependencies. Failure to do so can lead to different behavior between the
|
|
|
|
first and subsequent CMake runs.
|