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。如果要将此类选项添加到项目,请在任何 add_library() 调用之前,在顶级 CMakeLists.txt 文件中进行。请注意,如果将外部依赖项直接引入构建中,例如使用 FetchContent 或直接调用 add_subdirectory(),并且其中一个依赖项对此类调用到 option(BUILD_SHARED_LIBS ...),则顶级项目也必须调用 option(BUILD_SHARED_LIBS ...),然后才能引入其依赖项。如果不这样做,可能会导致首次和后续 CMake 运行之间的行为不同。