一、基本介绍
add_library是 CMake 中创建库文件(静态库或动态库)的核心命令。
它的主要作用是将源代码文件编译成库,以便在项目中复用或被其他目标链接。
基本语法如下所示:
add_library(<name> [STATIC | SHARED | MODULE] [EXCLUDE_FROM_ALL] source1 [source2 ...])各参数说明如下:
1、库类型:
(1)静态库 STATIC (最终生成.a或.lib)
例如:
add_library(mylib STATIC src1.cpp src2.cpp)(2) 动态库 SHARED (最终生成.so 或 .dll)
例如:
add_library(mylib SHARED src1.cpp src2.cpp)(3) 插件式动态库 MODULE(通常不被直接链接)
(4) 不指定类型,根据BUILD_SHARED_LIBS变量决定
set(BUILD_SHARED_LIBS ON) # 默认为动态库2、EXCLUDE_FROM_ALL 参数理解
EXCLUDE_FROM_ALL是cmake中的一个控制构建行为的标志,它的作用是标记某个目标默认不构建,除非该目标被明确指定或作为其他目标的依赖。
使用场景:
(1)构建可选的组件/插件
# 主要应用程序(默认构建) add_executable(main_app main.cpp) # 可选插件(默认不构建) add_library(plugin_a EXCLUDE_FROM_ALL plugin_a.cpp) add_library(plugin_b EXCLUDE_FROM_ALL plugin_b.cpp) # 只有在明确请求时才构建插件 # cmake --build . --target plugin_a(2)测试目标
# 主库(默认构建) add_library(main_lib src/core.cpp) # 测试程序(默认不构建) add_executable(run_tests EXCLUDE_FROM_ALL tests/test1.cpp tests/test2.cpp ) # 构建测试需要明确指定 # cmake --build . --target run_tests大型项目模块化构建或者测试套件管理可以使用这种思路。
3、源文件添加
.h不参与构建,只需要添加.cpp文件。