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