
目录别再踩坑了MinGW、LLVM、Clang、GCC… 这些编译工具到底是啥一篇大白话讲透先定一个贯穿全文的核心比喻一、后厨的核心主厨编译器本体1. GCC后厨里的老牌金牌主厨2. Clang新生代网红主厨手脚快、脾气好二、主厨的后台标准化万能厨房LLVM三、Windows 平台的后厨怎么在 Windows 里开餐厅1. MSVC美食城官方开的自营餐厅2. MinGW / MinGW-w64把 GCC 主厨请到 Windows 美食城开分店3. Cygwin在 Windows 美食城里开一个 Linux 主题餐厅四、后厨里的其他配角缺一不可的辅助角色1. 链接器ld、lld装盘师傅2. 调试器gdb、lldb品控师傅3. Make / CMake后厨总管五、新手终极指南怎么选1. 核心关系一句话总结2. 新手直接抄作业的选品指南最后说两句刚学 C/C 的朋友大概率都踩过这个坑想装个写代码的环境不管是 VSCode、Dev-C 还是 Code::Blocks教程里总会蹦出一堆你完全看不懂的名词MinGW、LLVM、Clang、GCC、MSVC、Cygwin…你照着教程一步步装完还是一头雾水这些东西到底是干嘛的它们之间有啥关系为什么我装了这个还要装那个今天这篇博客我不用半句晦涩的术语只用「开餐厅做菜」的大白话例子给你把这些工具的底裤都扒明白。看完你再也不会被这些名词搞晕选环境的时候再也不会踩坑。先定一个贯穿全文的核心比喻我们写 C/C 代码本质上是开一家餐厅给客人做一道菜你写的 C/C 代码 你用中文写的菜谱只有人类能看懂写的是 “先放两勺糖再炒 3 分钟” 这种步骤但是客人电脑完全看不懂。最终生成的.exe 可执行程序 端给客人的成品菜客人电脑能直接 “吃”能跑起来实现你要的功能。编译工具链就是我们今天要讲的这些东西 你餐厅的整个后厨团队负责把你写的中文菜谱一步步拆解、加工、装盘最终变成客人能吃的成品菜。电脑的 CPU比如 Intel 的 x86、手机的 ARM 来吃饭的客人每个客人的口味都不一样有的只吃辣有的只吃甜你做的菜必须符合他的口味不然他一口都不吃程序跑不起来。好了有了这个比喻我们接下来逐个拆解这些名词每个都对应后厨里的一个角色保证你一听就懂。一、后厨的核心主厨编译器本体后厨里最核心的角色就是主厨。他的工作就是把你写的中文菜谱翻译成后厨能懂的操作步骤再加工成半成品。对应到编程里就是把人类能看懂的代码翻译成电脑能懂的机器码的核心工具 —— 编译器。我们最常听到的 GCC、Clang就是两位风格完全不同的主厨。1. GCC后厨里的老牌金牌主厨GCC 的全称是 GNU Compiler Collection翻译过来是「GNU 编译器套装」。用我们的比喻来说GCC 就是一位从业几十年的老牌金牌主厨。他什么菜都会做不光能做 C/C 的菜还能做 Fortran、Go、Java 等十几门语言的菜兼容性拉满。他什么客人都能伺候不管是 Windows、Linux、MacOS还是 x86、ARM、RISC-V 架构的 CPU他都能做出符合口味的菜跨平台能力极强。他的江湖地位极高Linux 系统就是用他编译出来的开源界的绝对老大哥几乎所有的开源项目都能兼容他。当然老牌主厨也有小缺点手脚不算最快编译大项目的时候速度会比新生代主厨慢一点。脾气有点倔你菜谱写错了他报错的时候只会冷冰冰甩一堆术语新手很难看懂到底哪里错了。2. Clang新生代网红主厨手脚快、脾气好Clang就是现在越来越火的新生代主厨和我们后面要讲的 LLVM 是深度绑定的。用比喻来说Clang 就是后厨里的新生代网红主厨。手脚极快编译速度比 GCC 快很多尤其是大项目能省不少时间。脾气特别好你菜谱写错了他会给你标清楚哪一行错了、为什么错、甚至给你改对的建议对新手极其友好。长得干净代码结构清晰容易二次开发很多 IDE 和工具都喜欢基于他做扩展。很多人会问Clang 和 GCC 怎么选简单说新手写代码想报错友好一点用 Clang做 Linux 底层开发要极致兼容性用 GCC。二、主厨的后台标准化万能厨房LLVM很多新手会问我经常看到 Clang 和 LLVM 一起出现它们到底是什么关系这里我要纠正一个最大的误区LLVM 不是编译器它不是主厨用我们的比喻来说LLVM 是一套标准化的万能厨房 厨具套装。你想啊一个主厨再厉害没有厨房、没有锅碗瓢盆也做不出菜来。以前的 GCC 主厨是「厨房 主厨」绑定在一起的他的厨房只能他自己用别人用不了想改个厨具都特别麻烦。而 LLVM就是一群大佬做出来的开源、标准化、万能的厨房基础设施它有统一的操作台、统一的厨具标准、统一的食材加工流程不管哪个主厨来都能直接用这套厨房做菜。它最牛的地方是「一次编写到处适配」主厨只要把菜谱翻译成厨房统一的中间步骤厨房就能自动把它做成符合不同客人口味的菜不用主厨再一个个适配不同的 CPU 架构。那 Clang 和 LLVM 是什么关系Clang 是前台的主厨负责接你的菜谱、翻译成厨房能懂的步骤LLVM 是后台的厨房负责把这些步骤加工成最终的菜。他俩是黄金搭档合在一起就是一套完整的编译工具链。而且因为 LLVM 是标准化的除了 Clang还有很多其他的主厨也能用这套厨房比如编译 Rust 的 rustc、编译 Swift 的编译器底层都是用的 LLVM。一句话总结LLVM 是万能厨房Clang 是在这个厨房里干活的主厨。三、Windows 平台的后厨怎么在 Windows 里开餐厅很多新手的困惑都来自 Windows 平台为什么我在 Windows 写 C要装 MinGW它和 GCC 是什么关系和 Visual Studio 里的 MSVC 又有什么区别这里我们继续用比喻讲清楚Windows 就是一个美食城有自己的一套规矩你想在里面开餐厅必须符合它的规矩。1. MSVC美食城官方开的自营餐厅MSVC全称 Microsoft Visual C是微软官方的编译器和 Visual Studio 绑定在一起。用比喻来说MSVC 就是Windows 这个美食城官方开的自营餐厅。它完全适配美食城的所有规矩做出来的菜 100% 符合 Windows 的口味原生支持所有 Windows 的功能比如写桌面软件、游戏用它最合适。它和美食城的配套设施完全打通Visual Studio 的调试、智能提示、插件和它是无缝衔接的体验拉满。缺点也很明显它只做 Windows 的菜跨平台能力基本为 0你用它写的代码拿到 Linux 上基本跑不起来。2. MinGW / MinGW-w64把 GCC 主厨请到 Windows 美食城开分店MinGW 的全称是 Minimalist GNU for Windows翻译过来是「Windows 上的极简 GNU 环境」。我们前面说过GCC 是 Linux 里的老牌主厨那怎么让他在 Windows 里干活MinGW 就是干这个的它给 GCC 主厨在 Windows 美食城里租了个店面做了一套完整适配让 GCC 能在 Windows 里做出原生的.exe 程序。用比喻来说MinGW 就是「GCC 主厨在 Windows 开的分店」做出来的菜是完全符合 Windows 口味的原生菜不需要带任何额外的东西就能直接跑。这里要纠正一个新手必踩的坑现在大家用的基本都是 MinGW-w64而不是老的 MinGW。老的 MinGW 早就停止维护了只支持 32 位程序而 MinGW-w64 是它的升级换代版支持 32 位和 64 位程序更新更积极兼容性更好。新手装的时候一定要选 MinGW-w64别装老的 MinGW。3. Cygwin在 Windows 美食城里开一个 Linux 主题餐厅很多人会把 Cygwin 和 MinGW 搞混其实它俩完全不是一回事。MinGW 是让 GCC 做出 Windows 原生的菜而 Cygwin 是在 Windows 美食城里完整模拟了一个 Linux 后厨环境。用比喻来说Cygwin 就是在 Windows 里开了一个 Linux 主题餐厅里面的所有规矩、厨具、流程全都是 Linux 的你在 Linux 里写的代码几乎不用改就能在这里跑。但是它做出来的菜必须带着「Linux 模拟层」才能在 Windows 里跑不是原生的 Windows 程序体积大速度也会慢一点。一句话总结三者的区别写 Windows 原生程序用 Visual Studio 就选 MSVC想在 Windows 用 GCC兼容 Linux 代码做原生.exe选 MinGW-w64想在 Windows 里完整模拟 Linux 环境跑 Linux 的程序选 Cygwin。四、后厨里的其他配角缺一不可的辅助角色除了主厨和厨房后厨里还有很多必不可少的角色它们也是编译工具链里的一部分新手也经常会听到它们的名字。1. 链接器ld、lld装盘师傅你写的代码可能会分成好几个文件还会调用别人写好的库比如系统自带的 API、第三方的库。每个文件编译出来都是半成品菜链接器就是后厨里的装盘师傅负责把这些半成品菜、配菜、调料全部拼在一起做成一道完整的、能端给客人的成品菜。ldGCC 主厨配套的装盘师傅老牌稳定lldLLVM 厨房配套的装盘师傅速度更快和 Clang 是黄金搭档。2. 调试器gdb、lldb品控师傅你的程序跑起来出 bug 了就像菜做咸了、炒糊了你得知道哪里出了问题。调试器就是后厨里的品控师傅能让你一步步看做菜的全过程哪一步放多了盐哪一步火大了精准定位问题所在。gdbGCC 配套的品控师傅开源界的标配lldbLLVM 配套的品控师傅和 Clang 无缝衔接对新手更友好。3. Make / CMake后厨总管你写的大项目可能有几十个、上百个代码文件如果你一个个手动喊主厨编译能把你累死。Make 就是后厨的总管你给它写好一份「做菜流程表」Makefile它就会自动安排哪个文件先编译哪个文件后编译哪些文件改了才需要重新编译不用你手动一个个操作。但是 Makefile 写起来很麻烦而且不同平台的规则不一样所以就有了 CMake。CMake 就是更高级的后厨总管你不用给它写复杂的流程表只用写简单的配置它就能自动给你生成不同平台的 Makefile甚至 Visual Studio 的项目文件是跨平台开发的神器。五、新手终极指南怎么选1. 核心关系一句话总结你写的 C/C 代码经过Clang/GCC主厨翻译成中间代码交给LLVM/GCC 后端厨房加工成机器码再由链接器装盘师傅把所有文件拼在一起最终生成能在电脑上跑的程序。而MinGW-w64就是让这套工具链能在 Windows 上正常运行的适配层MSVC是 Windows 官方的专属工具链。2. 新手直接抄作业的选品指南不用纠结哪个工具 “最好”适合你的场景的就是最好的场景 1用 Visual Studio 写代码只做 Windows 的程序 / 游戏 → 直接用自带的 MSVC啥都不用额外装体验最好。场景 2用 VSCode/Dev-C 写代码想在 Windows 上学 C/C兼容跨平台代码 → 装 MinGW-w64别装老的 MinGW。场景 3做跨平台开发想要更快的编译速度、更友好的报错提示 → 用 ClangLLVM 工具链。场景 4想在 Windows 里跑 Linux 的程序 / 代码学习 Linux 开发 → 用 Cygwin或者更简单的 WSL。最后说两句很多新手刚接触编程的时候都会被这些五花八门的名词吓住觉得这些东西特别高深。但其实你拆开来就会发现它们本质上都是「帮你把代码变成能跑的程序」的工具而已。就像后厨里的主厨、厨房、装盘师傅分工不同目标都是一样的把菜做好。不用纠结哪个工具最好能让你顺利写代码、解决问题的就是最适合你的工具。希望这篇文章能帮你搞懂这些名词以后装环境的时候再也不会踩坑了。