BUILD_SHARED_LIBS¶
指示 add_library() 在调用时若未指定库类型,则默认使用 SHARED(动态库)而非 STATIC(静态库)。
当调用 add_library() 且未指定库类型时,会检查当前 BUILD_SHARED_LIBS 变量的值。如果为 true,则默认库类型为 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 与后续运行之间的行为不一致。