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 运行之间的行为差异。