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 运行之间出现不同的行为。