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/10/27 18:01:10 阅读更多 →
翻页笔选购指南:从技术原理到教学场景的全面解析

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

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

2026/11/1 19:44:46 阅读更多 →
Win11系统优化:一行PowerShell命令提升性能

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

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

2026/10/27 18:01:18 阅读更多 →

最新新闻

Electron桌面应用开发实战:从环境搭建到打包发布全流程

Electron桌面应用开发实战:从环境搭建到打包发布全流程

做前端这些年,我大部分时间都在跟浏览器标签页打交道,直到第一次把桌面应用跑起来,才发现原来自己一直被限制在地址栏和刷新按钮围起来的框框里。Electron这个词,最开始是在某段时间频繁出现在同事的讨论里,一个用HTML…

2026/11/3 1:09:25 阅读更多 →
滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

简介:亚太天能T109滑盖智能锁产品说明书是一份PDF格式的官方技术文档,主要面向智能锁安装人员、终端用户及售后维护者,帮助快速掌握产品安装、配置与常见故障处理。全包仅1个PDF文件,大小4.37MB,内容结构清晰&#xff…

2026/11/2 10:46:11 阅读更多 →
PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

上个月我在调试一台高速AGV的驱动系统,整车要求空载跑到8m/s,电机转速已经拉到额定点,驱动器的输出电压也顶到了母线电压极限附近。再往上踩速度指令,转速纹丝不动,三相电流反而开始震荡。那会儿我的第一反应就是&…

2026/11/2 10:47:40 阅读更多 →
C++核心知识点:从内存管理到STL的实战指南

C++核心知识点:从内存管理到STL的实战指南

C 这门语言我前前后后折腾了十几年,用它写过嵌入式驱动、做过游戏服务端,也搭过基础组件库。每次看到新人一头扎进"C 核心知识点"这个搜索词,我其实挺感慨的——这门语言的难点从来不是语法多,而是知识点之间的耦合太深…

2026/11/2 1:16:51 阅读更多 →
T109滑盖智能锁怎么装?安装调试与故障排查全攻略

T109滑盖智能锁怎么装?安装调试与故障排查全攻略

简介:亚太天能T109滑盖智能锁产品说明书以PDF格式发布,适合智能锁用户、安装人员与售后维修人员阅读。内容围绕T109系列指纹密码刷卡锁展开,先介绍前面板、后面板、锁体、机械钥匙、电池盒盖等部件名称与功能,再给出完整安装步骤&…

2026/11/2 10:46:31 阅读更多 →
LLM知识降熵:从信息垄断到理解权下放

LLM知识降熵:从信息垄断到理解权下放

你有没有过这种经历:翻开源码注释、论文摘要或者一份专业报告,每个字都认识,连在一起却像天书。想找人聊聊,身边要么没人懂,要么懂的懒得跟你解释。后来我试着把同一段内容丢给一个大语言模型,几秒钟之后&a…

2026/11/2 10:46:26 阅读更多 →

日新闻

周新闻

月新闻