1. 从Hello World说起:程序是怎么变成可执行文件的?
让我们从一个最简单的C程序开始:

在Linux上,要让这段代码运行,我们需要用GCC把它变成机器能执行的程序。这个过程分为4步:
预编译(hello.c → hello.i):处理#include等预处理指令
编译(hello.i → hello.s):生成汇编代码
汇编(hello.s → hello.o):生成机器码(目标文件)
链接(hello.o → hello):把目标文件和库合并成可执行文件
用GCC可以一键完成:

但在Windows的Visual Studio里,你只需要点"Build"按钮——因为VS是IDE,它把编译器、构建工具、调试器都打包好了,隐藏了这些细节。
2. GNU和GCC:自由软件运动的基石GNU是什么?
全称"GNU's Not Unix"(递归缩写),由Richard Stallman在1983年发起
目标:创建一个完全自由的操作系统(后来和Linux内核结合成了GNU/Linux)
精神:"软件应该自由使用、修改和分享"(GPL协议)

(GNU的logo是非洲牛羚,象征自由奔跑)
GCC又是什么?
GNU Compiler Collection(GNU编译器集合)
支持C、C 、Fortran等多种语言
Linux的默认编译器,也是开源世界的编译标准

3. Windows下的编译选择:MinGW vs MSVCMinGW:GCC的Windows版
全称:Minimalist GNU for Windows
特点:
把GCC移植到Windows
生成原生.exe,不依赖额外DLL
开源免费(Qt、GTK等常用它)

MSVC:微软的亲儿子
Microsoft Visual C ,集成在Visual Studio里
特点:
Windows兼容性最佳
闭源但免费(社区版)
和Windows SDK深度绑定

MinGW (GCC)MSVC出身GNU开源微软官方速度中等优化较好生态跨平台Windows专属4. 为什么需要构建工具?从Make到NinjaMake:最早的"智能批处理"
问题:当项目有a.c、b.c、lib.c...时,手动敲gcc命令太麻烦
解决:用Makefile定义规则


CMake:跨平台的Makefile生成器
新问题:不同平台要写不同的Makefile(Windows用nmake,Linux用make...)
解决:用CMake生成对应平台的构建文件

生成Makefile:

Ninja:Google出品,唯快不破
专为超大型项目优化(如Chrome、LLVM)
比Make快10倍(30000个文件1秒启动编译)
通常由CMake自动生成build.ninja

5. 现代C/C 开发工具链推荐场景推荐工具链Linux开发GCC CMake NinjaWindows原生开发MSVC Visual Studio跨平台项目MinGW/Clang CMake Ninja超大型项目Clang CMake Ninja总结:一张图理清关系

关键记忆点:
GCC是开源编译器,MSVC是微软的
Make老当益壮,Ninja后来居上
CMake不是编译器,是"生成构建文件的工具"
现在你可以自信地和undefined reference错误大战三百回合了!
暂无评论