news 2026/4/23 15:49:58

cmake 里 add_library 怎么理解

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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文件。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/23 11:35:07

语音合成与联邦学习结合:分布式训练保护用户语音隐私

语音合成与联邦学习结合&#xff1a;分布式训练保护用户语音隐私 在智能语音助手、有声读物和虚拟数字人日益普及的今天&#xff0c;用户对“像人一样说话”的期待越来越高——不仅要准确&#xff0c;还要有情感、有个性。然而&#xff0c;当AI开始模仿你的声音时&#xff0c;一…

作者头像 李华
网站建设 2026/4/23 11:35:17

工业级冷链温湿度监控系统解决方案:从感知到溯源

一、方案背景与行业痛点 冷链仓库作为生鲜食品、医药制品等温度敏感型货品的核心存储枢纽&#xff0c;其温湿度环境的稳定性直接决定货品品质与安全。当前行业普遍面临三大核心痛点&#xff1a; 一是传统人工巡检模式存在滞后性&#xff0c;通常2-4小时一次的记录间隔易形成监控…

作者头像 李华
网站建设 2026/4/18 14:29:58

语音合成中的方言保护价值:用GLM-TTS记录濒危地方语言

语音合成中的方言保护价值&#xff1a;用GLM-TTS记录濒危地方语言 在浙江温州一位90岁老人轻声念出“吃罢饭&#xff0c;去桥头讲白相”的瞬间&#xff0c;这句看似平常的方言话语&#xff0c;可能正成为某种语言最后的回响。类似的情景在全国各地悄然上演——随着城市化进程加…

作者头像 李华