news 2026/10/7 16:34:05

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/10/7 11:25:13

target_include_directories的作用

target_include_directories(${PROJECT_NAME} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR})为指定的目标&#xff08;${PROJECT_NAME}&#xff09;添加一个包含目录 (${CMAKE_CURRENT_SOURCE_DIR})&#xff0c;并且作用范围是仅限于该目标的编译过程。PRIVATE表示该包含目录仅在 ${PR…

作者头像 李华
网站建设 2026/10/6 0:06:09

语音合成与知识图谱联动:实体关系转化为口语化解释

语音合成与知识图谱联动&#xff1a;实体关系转化为口语化解释 在智能教育平台开发中&#xff0c;一个常见的挑战浮现出来&#xff1a;如何让AI讲解“爱因斯坦提出相对论”这件事时&#xff0c;不只是干巴巴地读出这句话&#xff0c;而是像一位真正的老师那样&#xff0c;用合…

作者头像 李华
网站建设 2026/10/4 9:02:10

GLM-TTS能否用于军事训练模拟?战场指令语音快速生成

GLM-TTS能否用于军事训练模拟&#xff1f;战场指令语音快速生成 在一场高强度的战术推演中&#xff0c;红方指挥官突然收到警报&#xff1a;“敌方无人机群正在逼近北翼防线&#xff01;”耳机里传来的声音沉稳果断&#xff0c;带着熟悉的北方口音和特有的语调节奏——这正是他…

作者头像 李华
网站建设 2026/10/4 9:05:17

【万字长文】大模型推理加速全攻略:七大方法全面提升推理效率,从简单优化到复杂架构改进的全方位解决方案!

模型分为prefill和decoding两个阶段&#xff0c;因为特性不同&#xff0c;因此加速方式不同。prefill的加速方式主要是少算、而decoding的加速方式主要是少传输。 推理优化的方式主要有如下几种方式&#xff1a; 1、减少token输入&#xff08;少算&#xff09;。 2、量化&am…

作者头像 李华
网站建设 2026/10/5 8:02:33

语音合成SEO新玩法:用GLM-TTS生成技术文章吸引精准流量

语音合成SEO新玩法&#xff1a;用GLM-TTS生成技术文章吸引精准流量 在搜索引擎越来越偏爱多媒体内容的今天&#xff0c;单纯依赖文字输出的技术博客正面临“写得再好也难被看见”的尴尬。尤其是AI、编程、数据科学这类高门槛领域&#xff0c;读者往往需要反复阅读才能理解复杂概…

作者头像 李华
网站建设 2026/10/6 16:41:27

GLM-TTS能否用于相声小品创作?双人对话交替合成技巧

GLM-TTS能否用于相声小品创作&#xff1f;双人对话交替合成技巧 在传统曲艺的舞台上&#xff0c;一段精彩的相声往往靠“逗哏”与“捧哏”的默契配合、语气起伏和节奏拿捏来引爆笑点。而如今&#xff0c;当人工智能开始介入语言艺术创作&#xff0c;一个问题悄然浮现&#xff1…

作者头像 李华