当前位置: 首页 > 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:更智能、更强大的“工程设计师”,帮你在不同平台上都能顺利搭建
http://www.xdnf.cn/news/422425.html

相关文章:

  • 如何用URDF文件构建机械手模型并与MoveIt集成
  • 获取accesstoken时,提示证书解析有问题,导致无法正常获取token
  • do while
  • 从代码学习深度学习 - 全卷积神经网络 PyTorch版
  • 【网络编程】七、详解HTTP 搭建HTTP服务器
  • MySQL 5.7在CentOS 7.9系统下的安装(上)——以rpm包的形式下载mysql
  • 音频特征工具Librosa包的使用
  • Windows Java gRPC 示例
  • windowsC++操作ADB
  • archlinux中挂载macOS的硬盘
  • keepalived+lvs
  • S32DS删除历史安装的license code(Software Activation Code)
  • 什么是序列化与反序列化
  • CodeBuddy终极测评:中国版Cursor的开发革命(含安装指南+HTML游戏实战)
  • 计算机网络网络层(下)
  • 奇妙小博客
  • 虚拟仿真技术在康养休闲旅游服务实训室中的核心应用
  • tomcat搭建内网论坛
  • 利用比较预言机处理模糊的偏好数据
  • 问题及解决02-处理后的图像在坐标轴外显示
  • Spring Boot 项目中什么时候会抛出 FeignException?
  • Pattern and Match
  • 【Qwen3 + MCP】快速打造一个免费的Qwen AI图像生成助手
  • 【前缀和】和为 K 的子数组(medium)
  • 数据清洗案例
  • 开源自定义Python库并上传到PyPi
  • 基于几何布朗运动的股价预测模型构建与分析
  • 华为0507机试
  • 【力扣】K个一组翻转链表
  • aardio - godking.vlistEx.listbar + win.ui.tabs 实现多标签多页面切换