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