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