C++进阶 Cmake

发布时间:2026/7/18 13:23:23

C++进阶 Cmake
一.makefile和Cmake对比makefile的执行过程写一个脚本文件CMake可以生成makefile文件的底层的学习makefile接触的比较多二.CMake1.1 Cmake工程流程1 在不使用CMake时编译工程如下2 在上面的机制中工程文件中添加一个源程序 bar.cpp3 使用CMake来管理工程的状态4 使用CMkake管理工程中添加一个新文件 bar.cpp1.2 语法特性介绍1 基本语法指令参数1 参数2 ...参数使用括号括起来参数之间使用空格或分号隔开2 注意指令是大小写无关的但是参数和变量是大小写相关的set(HELLO hello.cpp) # 定义一个变量名叫HELLO 变量的值为hello.cppadd_executable(hello main.cpp hello.cpp) # 通过main.cpp 和hello.cpp 编译生成这里的hello可执行程序名ADD_EXECUTABLE(hello main.cpp ${HELLO}) # 作用同上3 变量使用${}进行取值但是在if控制语句中是直接使用变量名的if(HELLO) 是正确的if(${HELLO}) 是不正确的4 语句不以分号结束7.4 重要的指令1 cmake_minimum_required:指定CMake的最小版本支持,一般作为第一条cmake指令# CMake设置最小支持版本为 2.8cmake_minimum_required(VERSION 2.8)2 project定义工程的名称并可以指定工程支持的语言# 指定工程的名称为HELLOWORLDproject(HELLOWORLD CXX) # 表示工程名为HELLOWORLD 使用的语言为C3 set:显式定义变量# 定义变量 SRC 其值为 sayhello.cpp hello.cppset(SRC sayhello.cpp hello.cpp)4 add_executable:通过依赖生成可执行程序# 编译main.cpp 生成main的可执行程序add_executable(main main.cpp)5 include_directories:向工程添加多个特定的头文件搜索路径吗类似于g编译指令中的 -I# 将/usr/lib/mylibfolder 和 ./include添加到工程路径中include_directories(/usr/lib/mylibfolder ./include)6 link_directories:向工程中国添加多个特定的库文件搜索路径类似于g编译指令的 -L选项# 将将/usr/lib/mylibfolder 和 ./lib添加到库文件搜索路径中link_directories(/usr/lib/mylibfolder ./lib)7 add_library:生成库文件包括动态库和静态库# 通过SRC 变量中的文件生成动态库add_library(hello SHARED ${SRC}) # 该语句生成的是动态库add_library(hello STATIC ${SRC}) # 该语句生成的是静态库8 add_compile_options:添加编译参数# 添加编译参数 -Wall -stdc11add_compile_options(-Wall -stdc11)9 target_link_libraries:为target添加需要链接的共享库,类似于g编译中的 -l 指令# 将hello 动态库文件链接到可执行程序main中target_link_libraries(main hello)7.5 CMake常用变量1 CMAKE_C_FLAGSgcc编译选项的值2 CMAKE_CXX_FLAGSg编译选项的值# 在CMAKE_CXX_FLAGS编译选项后追加 -stdc11set(CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS} -stdc11)3 CMAKE_BUILD_TYPE编译类型Debug 、Release# 设定编译类型为Debug调试时需要选择该模式set(CMAKE_BUILD_TYPE Debug)# 设定编译类型为Release发布需要选择该模式set(CMAKE_BUILD_TYPE Release)三.CMake工程实战7.6 CMake编译工程CMake目录结构项目主目录中会放一个CMakeLists.txt的文本文档后期使用cmake指令时依赖的就是该文档1 包含源文件的子文件夹中包含CMakeLists.txt文件时主目录的CMakeLists.txt要通过add_subdirector添加子目录2 包含源文件的子文件夹中不包含CMakeLists.txt文件时子目录编译规则体现在主目录中的CMakeLists.txt7.6.1 两种构建方式 推荐外部构建1 内部构建不推荐使用内部构建会在主目录下产生一大堆中间文件这些中间文件并不是我们最终所需要的和工程源文件放在一起时会显得比较杂乱无章## 内部构建# 在当前目录下编译主目录中的CMakeLists.txt 文件生成Makefile文件执行语法cmake .# . 表示当前路径# 执行make命令生成目标文件执行语法make2 外部构建推荐使用将编译输出的文件与源文件放到不同的目录下进行编译此时编译生成的中间文件不会跟工程源文件进行混淆## 外部构建步骤# 1、在当前目录下创建一个 build 文件用于存储生成中间文件mkdir build# 2、进入build文件夹内cd build# 3、编译上一级目录中的CMakeLists.txt,生成Makefile文件以及其他文件cmake ..# ..表示上一级目录# 4、执行make命令生成可执行程序make7.7 CMake代码实战7.7.1 同一目录下的文件进行编译1 源文件2 CMakeLists.txt文件3 内部构建4 外部编译7.7.2 分文件编译1 头文件2 源文件3 测试文件4 分文件编译使用g编译器生成可执行程序5 创建工程管理文件 CMakeLists.txt

相关新闻

Claude Code原生安装与权限工作流实战指南

Claude Code原生安装与权限工作流实战指南

2026/7/18 13:13:22

1. 项目概述:这不是又一个“AI编程助手”安装教程,而是一份面向真实开发场景的Claude Code实战手册 “2026 Claude Code 最全使用指南”这个标题里,“最全”两个字不是噱头,而是我过去18个月在三个不同技术栈(前端微服…

RAG 上线后怎么排查问题?日志与可观测性

RAG 上线后怎么排查问题?日志与可观测性

2026/7/18 13:13:22

上一篇文章里,我们讨论了 RAG 如何降低成本。 一个重要结论是: 缓存、摘要、分层检索和上下文控制,能显著降低系统运行成本。 但当 RAG 真正上线以后,还有一个更现实的问题会很快出现: 出问题了,怎么查&…

Turbowarp文本换行难题解析:字符编码原理与3种实用解决方案

Turbowarp文本换行难题解析:字符编码原理与3种实用解决方案

2026/7/18 13:13:22

你是不是也遇到过这样的问题:在Turbowarp里想要让文本换行显示,却发现按回车键根本不起作用?明明在其他编程环境里很简单的换行操作,在Turbowarp里却变成了一个让人头疼的技术难题。其实,Turbowarp的文本换行问题背后隐…

CC35xx HOST_XIP与HSM寄存器深度解析:安全DMA与硬件加密实战

CC35xx HOST_XIP与HSM寄存器深度解析:安全DMA与硬件加密实战

2026/7/18 14:23:26

1. 项目概述与核心价值在嵌入式系统,尤其是物联网(IoT)和无线连接设备的开发中,安全性与效率往往是天平的两端。一方面,我们需要高性能的DMA(直接内存访问)来搬运数据,以释放CPU算力…

Windows驱动清理终极指南:3分钟学会用Driver Store Explorer释放10GB系统空间

Windows驱动清理终极指南:3分钟学会用Driver Store Explorer释放10GB系统空间

2026/7/18 14:23:26

Windows驱动清理终极指南:3分钟学会用Driver Store Explorer释放10GB系统空间 【免费下载链接】DriverStoreExplorer Driver Store Explorer 项目地址: https://gitcode.com/gh_mirrors/dr/DriverStoreExplorer 你是否曾经因为Windows系统盘空间不足而烦恼&a…

VESC Tool完全指南:开源无刷电机控制器的终极配置工具

VESC Tool完全指南:开源无刷电机控制器的终极配置工具

2026/7/18 14:23:26

VESC Tool完全指南:开源无刷电机控制器的终极配置工具 【免费下载链接】vesc_tool The source code for VESC Tool. See vesc-project.com 项目地址: https://gitcode.com/gh_mirrors/ve/vesc_tool VESC Tool是VESC无刷电机控制器的官方配置软件,…

深入解析TI MCU硬件CRC中断机制与错误处理实战

深入解析TI MCU硬件CRC中断机制与错误处理实战

2026/7/18 14:23:26

1. 项目概述在嵌入式系统开发,尤其是涉及数据存储、固件安全或通信可靠性的场景里,数据完整性校验是绕不开的一环。你肯定遇到过这样的问题:系统运行一段时间后,存储在Flash里的关键参数莫名其妙地“变”了,或者通过总…

如何在10分钟内训练专业级AI语音克隆模型?RVC WebUI完全指南

如何在10分钟内训练专业级AI语音克隆模型?RVC WebUI完全指南

2026/7/18 14:23:26

如何在10分钟内训练专业级AI语音克隆模型&#xff1f;RVC WebUI完全指南 【免费下载链接】Retrieval-based-Voice-Conversion-WebUI Easily train a good VC model with voice data < 10 mins! 项目地址: https://gitcode.com/GitHub_Trending/re/Retrieval-based-Voice-C…

FydeOS无损安装指南:让老旧电脑重获新生

FydeOS无损安装指南:让老旧电脑重获新生

2026/7/18 14:13:25

1. 闲置电脑焕新方案&#xff1a;FydeOS无损安装指南 十年前的老电脑跑不动Windows 10/11&#xff1f;先别急着挂闲鱼&#xff01;实测通过FydeOS系统能让4GB内存的联想Y470笔记本流畅运行Chrome浏览器、WPS办公三件套和哔哩哔哩网页版。这个基于ChromiumOS的国产轻量系统&…

Unity游戏文本翻译架构深度解析:XUnity.AutoTranslator的技术实现与工程实践

Unity游戏文本翻译架构深度解析:XUnity.AutoTranslator的技术实现与工程实践

2026/7/18 14:07:00

Unity游戏文本翻译架构深度解析&#xff1a;XUnity.AutoTranslator的技术实现与工程实践 【免费下载链接】XUnity.AutoTranslator 项目地址: https://gitcode.com/gh_mirrors/xu/XUnity.AutoTranslator XUnity.AutoTranslator作为Unity游戏社区中最成熟的文本翻译解决方…

openEuler Raspberry Pi Kernel设备驱动开发指南:为树莓派硬件添加支持

openEuler Raspberry Pi Kernel设备驱动开发指南:为树莓派硬件添加支持

2026/7/17 17:34:09

openEuler Raspberry Pi Kernel设备驱动开发指南&#xff1a;为树莓派硬件添加支持 【免费下载链接】raspberrypi-kernel It provides openEuler kernel source for Raspberry Pi 项目地址: https://gitcode.com/openeuler/raspberrypi-kernel 前往项目官网免费下载&…

openEuler系统集成测试实战:基于smoke-test套件的环境验证技巧

openEuler系统集成测试实战:基于smoke-test套件的环境验证技巧

2026/7/18 5:51:23

openEuler系统集成测试实战&#xff1a;基于smoke-test套件的环境验证技巧 【免费下载链接】integration-test The repo contains test suits for system integration test 项目地址: https://gitcode.com/openeuler/integration-test 前往项目官网免费下载&#xff1a;…

从模糊意图到可执行指令:Claude PRD中Prompt Engineering与需求颗粒度的5级映射法则

从模糊意图到可执行指令:Claude PRD中Prompt Engineering与需求颗粒度的5级映射法则

2026/7/18 0:02:02

更多请点击&#xff1a; https://kaifayun.com 第一章&#xff1a;从模糊意图到可执行指令&#xff1a;Claude PRD中Prompt Engineering与需求颗粒度的5级映射法则 在Claude驱动的产品需求文档&#xff08;PRD&#xff09;生成实践中&#xff0c;原始业务意图往往以自然语言片…

Cursor配置生成失效?3大隐藏陷阱+4行修复代码,资深工程师连夜整理的紧急补救清单

Cursor配置生成失效?3大隐藏陷阱+4行修复代码,资深工程师连夜整理的紧急补救清单

2026/7/18 0:02:02

更多请点击&#xff1a; https://codechina.net 第一章&#xff1a;Cursor配置生成失效&#xff1f;3大隐藏陷阱4行修复代码&#xff0c;资深工程师连夜整理的紧急补救清单 Cursor 配置生成突然失效&#xff0c;是近期高频报障场景。表面看是 cursor.config.json 未更新或 LSP…

某智驾大牛创业

某智驾大牛创业

2026/7/18 0:02:02

作者&#xff1a;钟声编辑&#xff1a;Mark出品&#xff1a;红色星际头图&#xff1a;智能驾驶图片据悉&#xff0c;国内某头部智驾公司端到端模型技术大牛Z投身创业&#xff0c;并且已经拿到融资。Z不仅是该头部公司内部最年轻的对标阿里P10级别技术负责⼈&#xff0c;更是业内…