当前位置: 首页 > news >正文

vim,gcc/g++,makefile,cmake

一、vim:你的小帮手——文本编辑器

它是干嘛的?

想象你的代码就像是写在一本“程序的笔记本”里,vim就是一个超级厉害的“数字笔记本”或“文字编辑器”。

它有什么用?

  • 编写代码:编辑、修改你的源代码
  • 代码高亮:不同的语法用不同颜色帮你区分,方便阅读
  • 快速操作:支持很多快捷键,写代码很快
  • 自动缩进:让代码格式整齐
  • 支持插件:可以装很多“扩展”功能,比如自动补全、调试等

简单理解:

vim就是一个“神奇的文字处理神器”,帮你快速写、改程序代码。


二、gcc/g++:你的“翻译官”——编译工具

它是干嘛的?

当你写完代码,就像写了一个“说明书”,但电脑看不懂。gcc(C语言)和g++(C++语言)就是把你写的“说明书”变成“机器可以直接执行的指令”的“翻译官”。

它们做什么?

  • 预处理:处理宏定义和头文件
  • 编译:检查语法,把代码变成低级的“汇编语言”
  • 汇编:把汇编翻译成“机器代码”
  • 链接:把所有需要的“零件”组合成一个“完整的机械”,即可执行程序

简单比喻

你写一份菜谱(源码),gcc/g++就是那个“厨师”,帮你把菜谱变成一道可以“上桌吃”的美味佳肴(可执行文件)!

三、Makefile:你的“任务清单”——自动化编译脚本

它是干嘛的?

当你的项目变大,代码有很多文件,手动编译太麻烦。Makefile就像一个“助手”,帮你安排好“做菜的步骤”。

它怎么用?

  • 定义目标:比如“做一个程序”
  • 列出依赖:哪些文件必须先编译好
  • 指定命令:怎么帮助你自动编译

举个例子:

如果你写了两个文件main.cpputils.cpp,想让它们一起组成一个程序,使用Makefile可以写一个“清单”告诉“助手”:

复制代码

# makefile示例
all: myprogrammyprogram: main.o utils.og++ -o myprogram main.o utils.omain.o: main.cppg++ -c main.cpputils.o: utils.cppg++ -c utils.cpp

只要在命令行输入make,它就会自动帮你按照“清单”步骤,自动编译链接,省掉很多繁琐步骤。

总结

  • Makefile就是帮你“自动做繁琐事情的清单”

四、CMake:更智能的“工程管理工具”

它是干嘛的?

当项目变得复杂,隔壁同学用makefile写得非常麻烦,CMake就像一个“智能调度员”,帮你配置、生成对应平台的“构建文件”。

它和makefile有什么区别?

  • 平台无关:你写一次CMakeLists.txt,可以在Windows、Linux、Mac都用
  • 支持多种开发环境:可以生成Unix的Makefile,也能生成Visual Studio项目
  • 更强大:可以自动检测依赖,管理大工程

举个比喻:

想像你要“搭建一座桥”,用makefile就是自己用砖头一块一块堆,得考虑平台、参数;用CMake就像请了一个“智能建筑设计师”,帮你自动设计出适合不同地方的“施工方案”。

实际使用:

你写个CMakeLists.txt文件(工程配置文件),写一些规则,CMake帮你生成对应的Makefile或工程文件:

cmake_minimum_required(VERSION 3.10)
project(MyProject)add_executable(myapp main.cpp utils.cpp)

运行:

cmake .
make

即可自动完成。


五、它们之间的关系总结

工具作用你可以怎么用?作用的“粒度”
vim写代码的“笔记本”把程序写在里面代码编辑
gcc/g++把源代码“翻译”成可运行的程序编译你的程序编译、连线(最终生成可执行文件)
Makefile“自动化任务清单”,帮你自动编译多个文件简化复杂工程的构建自动化编译流程
CMake“智能构建管理工具”,跨平台,支持多环境配置大型跨平台项目生成Makefile或工程文件

最后总结

  • vim:写程序的工具,帮你把代码写得漂亮、快捷
  • gcc/g++:把写好的代码“变成机器能跑的东西”
  • Makefile:告诉“助手”怎样一步步“造”出你的程序,省时省力
  • CMake:更智能、更强大的“工程设计师”,帮你在不同平台上都能顺利搭建

相关文章:

  • 适应性神经树:当深度学习遇上决策树的“生长法则”
  • VSCode中Node.js 使用教程
  • 深度学习计算
  • IP代理池环境配置
  • React面试常问问题详解
  • 《ffplay 读线程与解码线程分析:从初始化到 seek 操作,对比视频与音频解码的差异》
  • ElasticSearch父子关系数据建模
  • 多线程代码案例-1 单例模式
  • 基于深度学习的水果识别系统设计
  • 无人机避障——(运动规划部分)深蓝学院动力学kinodynamic A* 3D算法理论解读(附C++代码)
  • Qt 样式表qss学习
  • 【Qt】之音视频编程2:QtAV的使用篇
  • Kubernetes容器运行时:Containerd vs Docker
  • 奇妙小博客
  • 项目里程碑未被明确,如何有效控制进度
  • Java Solon v3.3.0 发布(国产优秀应用开发基座)
  • 操作实例 :使用rpm命令安装并解压RAR文档的工具软件UNRAR
  • 初入OpenCV
  • 用vite脚手架建立 前端工程
  • LabVIEW 编程难点
  • 把手机做网站服务器/网络营销策划ppt
  • 苏州网站设计师招聘信息/谷歌浏览器安卓下载
  • 怎么让别人做网站/自己如何做网站
  • 内蒙古自治区精神文明建设网站/cms自助建站系统
  • 淄博市沂源县建设局网站/软文兼职
  • 南昌县网页设计/昆明百度搜索排名优化