
一、 GNU 到底是什么?(极简版)
GNU = 一套开源、免费、自由的软件生态系统
全称:GNU's Not Unix(递归梗,意思"不是Unix,但像Unix")
你可以把它理解成:
Linux 系统里几乎所有命令行工具,都是 GNU 项目搞出来的。
1. GNU 给了你哪些东西?
你写 GD32、单片机、Linux 天天都在用:
- GCC :C/C++ 编译器(编译
.c文件) - Make / cmake:构建工程
- Binutils:ld、objcopy、objdump 等
- Bash:终端命令行
- gdb:调试器
- grep、find、tar、sed、awk 等一堆工具
一句话:
没有 GNU,就没有你现在用的编译环境。
2. GNU 和 Linux 的关系
- Linux 只是一个内核(kernel)
- GNU 提供所有外围工具(编译器、shell、命令、库)
合在一起才叫:
GNU/Linux 系统
3. GNU 最出名的:开源协议
-
GPL 协议
特点:开源传染
用了 GPL 代码,你的整个项目也必须开源。
-
LGPL 协议
宽松一点,可以动态链接不开源。
很多单片机库、RTOS、驱动都用这些协议。
4. 超级精简总结
- GNU = 开源软件项目组织
- 提供了 GCC、Make、Binutils、Bash 等核心工具
- 你编译 GD32 代码、用 Linux 命令,都在依赖它
二、关系
1. GNU
是一个开源项目组织 ,它做了一堆免费工具,
包括:GCC、make、binutils、gdb 等。
2. GCC + make + binutils + ......
合在一起叫 GNU 工具链(Toolchain) ,
就是你编译 GD32 用的那套编译器套装。
3. make 和 Makefile
- Makefile 是"编译说明书"
- make(GNU make)是执行说明书的工具
你敲 make → 它读 Makefile → 调用 GCC 编译工程。
超级终极总结(背这一句就够)
GNU 做了 GCC 和 make;
Makefile 告诉 make 怎么编译;
make 调用 GCC 把代码变成固件。
画一张极简关系图,一眼看懂整个编译流程。
这张图一眼看懂所有关系,看完再也不会乱👇
一张图看懂:GNU / GCC / make / Makefile / Toolchain
【 GNU 】
↓
(做了一堆开源工具:GCC、make、binutils、gdb...)
↓
【 GNU Arm 工具链 Toolchain 】
↓
├─ 【 GCC 】:真正负责编译 C 代码 → 生成 .o
└─ 【 make 】:执行编译的命令工具
↑
│
【 Makefile 】
(给 make 看的"编译说明书":
编译哪些文件、用什么参数、怎么链接、生成 bin)
│
↓
你敲命令:make
↓
【 GD32 固件 .bin / .hex 】
再用 3 句人话总结(背这个)
- GNU 是"爸爸",生了 GCC、make 这些工具。
- Makefile 是"菜谱",写好怎么编译。
- make 按菜谱,指挥 GCC 炒菜,最后烧出单片机固件。