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

相关新闻

3个关键技巧:彻底改变你的暗黑3游戏体验

3个关键技巧:彻底改变你的暗黑3游戏体验

3个关键技巧:彻底改变你的暗黑3游戏体验 【免费下载链接】D3keyHelper D3KeyHelper是一个有图形界面,可自定义配置的暗黑3鼠标宏工具。 项目地址: https://gitcode.com/gh_mirrors/d3/D3keyHelper 还在寻找让暗黑破坏神3游戏体验更上一层楼的方法…

2026/8/19 2:47:06 阅读更多 →
翻页笔选购指南:从技术原理到教学场景的全面解析

翻页笔选购指南:从技术原理到教学场景的全面解析

你有没有过这样的经历:站在讲台上,正讲到关键处,手里的翻页笔突然卡顿,或者遥控距离不够,只能尴尬地走回电脑前手动操作?又或者,每次公开课或重要汇报前,总要反复检查翻页笔电量&…

2026/8/18 16:35:59 阅读更多 →
Win11系统优化:一行PowerShell命令提升性能

Win11系统优化:一行PowerShell命令提升性能

1. 项目概述:一行代码优化Win11后台服务Windows 11系统默认运行着大量后台服务,这些服务会占用宝贵的系统资源,导致性能下降、响应迟缓。通过PowerShell命令可以精准控制这些服务的运行状态,实现类似Linux系统的轻量化体验。这个优…

2026/8/16 15:37:33 阅读更多 →

最新新闻

AI论文写作工具最全盘点:从语法校对到查重降AI,一篇就够了

AI论文写作工具最全盘点:从语法校对到查重降AI,一篇就够了

论文写完了,但总觉得哪里不对劲?别急,这些 AI 工具能帮你把初稿打磨成能上战场的“兵器”。每年毕业季,后台总能看到一堆类似的问题:“论文写完怎么改才能过审?”作为一个从“查重率 50%”被吓到肝颤、最后…

2026/8/19 2:46:56 阅读更多 →
Arduino开关控制LED:从硬件连接到软件消抖的完整实践指南

Arduino开关控制LED:从硬件连接到软件消抖的完整实践指南

1. 项目概述:从“点灯”到“交互”的第一步如果你刚拿到一块Arduino开发板,点亮一个LED通常是你的第一个实验。这就像学习编程时打印“Hello, World”一样,是踏入硬件世界最经典的入门仪式。但仅仅让LED亮起来,似乎还少了点什么—…

2026/8/19 2:46:56 阅读更多 →
从Lotus Notes到Office 365数据迁移:策略、工具与实战避坑指南

从Lotus Notes到Office 365数据迁移:策略、工具与实战避坑指南

1. 项目概述:从Lotus Notes到Office 365的数据迁徙如果你手头正管理着一套陈旧的IBM Lotus Notes/Domino系统,看着团队里越来越多的同事开始熟练地使用Teams开会、在OneDrive里共享文件、用Outlook Web App处理邮件,而你那套经典的绿色Notes客…

2026/8/19 2:46:56 阅读更多 →
移动端AR测距应用开发:从原理到iOS实战

移动端AR测距应用开发:从原理到iOS实战

1. 项目缘起:为什么我们需要一个“距离测量”应用?在日常生活和工作中,测量距离是一个高频但常常被忽视的需求。你可能遇到过这些场景:装修房子时,想估算一下沙发到电视墙的距离,看看买多大的电视合适&…

2026/8/19 2:46:56 阅读更多 →
选对AI论文网站少改 10 遍稿!高赞工具实测 + 选择避坑

选对AI论文网站少改 10 遍稿!高赞工具实测 + 选择避坑

每到毕业季,论文就成了不少同学的“噩梦”:选题毫无头绪、写初稿卡得不行、格式反复调整、查重标红一大片、AIGC检测风险让人提心吊胆,通宵熬夜成了家常便饭。很多人以为AI工具能一键生成整篇论文,结果踩坑后才明白,选…

2026/8/19 2:46:56 阅读更多 →
Odinub ARM平台OpenCV环境部署:从源码编译到性能优化全攻略

Odinub ARM平台OpenCV环境部署:从源码编译到性能优化全攻略

1. 项目缘起:为什么要在Odinub上折腾OpenCV?最近在折腾一个基于Odinub的视觉小项目,核心需求是让这块小巧的开发板能“看懂”图像。无论是想做个智能门铃、小车避障,还是玩点图像识别的小实验,OpenCV几乎是绕不开的基石…

2026/8/19 2:45:56 阅读更多 →

日新闻

【单片机课程设计/毕业设计】基于 STM32 与 WiFi 模块的室内通风智能管控系统设计 基于 STM32 的人体存在感知自适应风扇控制系统设计(018503)

【单片机课程设计/毕业设计】基于 STM32 与 WiFi 模块的室内通风智能管控系统设计 基于 STM32 的人体存在感知自适应风扇控制系统设计(018503)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于嵌入式单片机,Java、小程序技术领域和毕业项目实战 ✌️…

2026/8/19 0:00:30 阅读更多 →
AI如何驱动数学猜想生成:从大语言模型到自动化数学发现

AI如何驱动数学猜想生成:从大语言模型到自动化数学发现

1. 项目概述:当AI开始“猜”数学定理 最近在AI研究圈里,一个名为“Moonshine”的项目引起了不小的讨论。这名字本身就挺有意思,直译是“月光”,但在数学史上,它特指一个神秘而美丽的联系——魔群月光猜想,连…

2026/8/19 0:00:30 阅读更多 →
WarcraftHelper 魔兽争霸3优化实战指南

WarcraftHelper 魔兽争霸3优化实战指南

WarcraftHelper 魔兽争霸3优化实战指南 【免费下载链接】WarcraftHelper Warcraft III Helper , support 1.20e, 1.24e, 1.26a, 1.27a, 1.27b 项目地址: https://gitcode.com/gh_mirrors/wa/WarcraftHelper 一台刚配的新电脑,跑《魔兽争霸3》却卡成 PPT——这…

2026/8/19 0:02:31 阅读更多 →

周新闻

基于阿里云与通义千问(Qwen)构建AI应用:从模型调用到生产部署的完整实践指南

基于阿里云与通义千问(Qwen)构建AI应用:从模型调用到生产部署的完整实践指南

如果你是一名开发者,最近可能已经感受到了AI大模型正在从“玩具”变成“生产力工具”的强烈信号。从代码补全到智能Agent,从本地部署到云端API,我们正处在一个技术栈快速重构的节点。然而,面对层出不穷的模型、框架和工具&#xf…

2026/8/18 9:15:35 阅读更多 →
工业通信系统底层逻辑:04 反射——高频能量撞墙之后会发生什么?

工业通信系统底层逻辑:04 反射——高频能量撞墙之后会发生什么?

第四篇:反射——高频能量撞墙之后会发生什么? —— 你以为信号已经过去了,其实它正在回来打你 老Q的现场笔记 第五季,我们正式进入工业神经系统层。这里不再是单个设备的战斗,而是整个工厂“经脉”层面的秩序之战。从这一篇开始,你将第一次看清:看似简单的信号传播,背…

2026/8/18 9:06:28 阅读更多 →
【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码

【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。🍎 往期回顾关注个人主页:Matlab科研工作室👇 关注我领取海量matlab电子书和…

2026/8/18 9:04:56 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/17 18:54:37 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/17 18:55:16 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/17 18:55:55 阅读更多 →