首页›Linux操作系统›Linux网络操作系统-第24节-GCC编译与Make调试

Linux网络操作系统-第24节-GCC编译与Make调试

Linux 下很多软件以源码形式发布,装它们离不开编译器。这一节理解 gcc 的四步编译,再用 Makefile 管理多文件项目。

第二十四节 GCC编译四阶段与Makefile入门
第二十四节 GCC编译四阶段与Makefile入门

一、GCC 四阶段

  • 预处理(-E):展开 #include 头文件、替换宏;
  • 编译(-S):翻译成汇编代码 hello.s;
  • 汇编(-c):生成二进制目标文件 hello.o;
  • 链接(-o):把目标文件与库函数拼成可执行文件。
yum install -y gcc         # 装编译器
vim hello.c                # 写一个打印 Hello 的 C 程序
gcc -E hello.c -o hello.i  # ① 只预处理
gcc -S hello.i -o hello.s  # ② 生成汇编
gcc -c hello.s -o hello.o  # ③ 生成目标文件
gcc hello.o -o hello       # ④ 链接成可执行

gcc hello.c -o hello       # 一步到位(日常用法)
./hello

二、Makefile:多文件项目的管理器

工程有十几个源文件时,逐条 gcc 又慢又容易漏。Makefile 描述「目标 ← 依赖 → 命令」:

vim Makefile        # 注意:命令行前必须是 Tab 缩进

hello: hello.o util.o
	gcc hello.o util.o -o hello
hello.o: hello.c
	gcc -c hello.c
util.o: util.c
	gcc -c util.c
clean:
	rm -f *.o hello

make        # 自动按依赖关系编译
make clean  # 清理产物

make 的聪明之处:只重编改动过的文件——改了 util.c,hello.c 的编译结果直接复用。大工程(如内核)全靠这一机制节省时间。作业:写 main.c 与工具函数 util.c 两个文件,用 Makefile 编译通过。

上一篇
下一篇