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