当前位置: 首页 > news >正文

cmake 里 add_library 怎么理解

一、基本介绍

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文件。

http://www.jsqmd.com/news/193837/

相关文章:

  • Xcode 11中缺失“助理编辑器”?
  • 【稀缺资料】大型项目PHP监控阈值标准文档首次公开:含CPU、内存、响应时间等12项指标
  • 2025年新疆比较好的西点培训机构推荐:诚信的西点培训机构有哪些? - 工业品牌热点
  • target_include_directories的作用
  • 深度体验2025年赴华商务文化双接洽 - 2025年品牌推荐榜
  • 2026年智能体工程(Agent_Engineering)—大模型应用从开发到生产的关键实践!
  • 基于微信小应用的食物识别系统
  • 语音合成中的方言保护价值:用GLM-TTS记录濒危地方语言
  • 2025年上海离婚财产纠纷律师权威推荐榜单:离婚房产/遗嘱律师/婚姻专业律师及律所精选 - 品牌推荐官
  • AI时代程序员的深度思考力修炼:避免人类思维退化,构建AI时代的核心竞争力与护城河!
  • 2026年年度的计划(草稿)
  • sward快速上手指南 - 如何在sward文档中集成Kanass事项
  • AI时代产品经理的转型危机:63%企业已采用AI产品,传统产品经理如何逆袭求生?
  • 2025年沈阳技术好的汽车贴膜品牌推荐榜单,车衣改色/贴车衣/贴太阳膜/汽车贴膜/太阳膜/贴隐形车衣,汽车贴膜定制有哪些 - 品牌推荐师
  • Kanass快速上手指南:如何进行任务管理
  • 事倍功半是蠢蛋73 三谈jenkins 本地构建仓库让他本地编译然后推送
  • 2026年评价高的济南画室暑假班,济南画室,济南画室素描课培训机构推荐及选购参考榜 - 品牌鉴赏师
  • 2026年环形高压鼓风机厂家哪家好,国产品牌推荐 - 品牌推荐大师
  • Kanass快速上手指南:如何进行缺陷管理
  • [Notes] (不擅长的)数学相关瞎扯
  • xcode Show Assistant Editor
  • 数据治理建设方法:合规与效率双提升策略
  • 2026年诚信的济南画室,济南画室集训,济南画室暑假班培训机构选购参考汇总 - 品牌鉴赏师
  • GLM-TTS能否用于电梯广告配音?短平快促销语音批量生产
  • 【中小企业数字化转型利器】:用PHP低代码实现精细化权限管控
  • (分库分表扩容不再难) PHP大型系统弹性伸缩架构设计全揭秘
  • 【稀缺技术曝光】:企业级PHP图像识别加速框架设计内幕
  • 从零开始解析物联网协议,PHP开发者必须掌握的3种数据解码技巧
  • 图像识别延迟高达数秒?:立即应用这6个PHP性能急救技巧
  • GLM-TTS能否用于游戏NPC对话生成?角色语音多样化实现