一、背景
在此阅读之前推荐先阅读《 [008]C/C++系列 | 一个C编译过程》
二、文件描述
# #是注释 全新语言(不仅仅对于C/C++)
# 第一层:显式规则
# 1、语法格式
# 目标文件:依赖文件
# TAB指令
# 2、第一个目标文件是我们终极目标(有点像递归)
# 3、伪目标 .PHONY: 按照这个方式编译完成之后
# .c .i .s .o 程序有错误 .c错误改了!!!
# 每一次编译 能不能先把之前的编译文件先删除
hello:hello.o
gcc hello.o -o hello
hello.o:hello.s
gcc -C hello.s -o hello.o
hello.s:hello.i
gcc -S hello.i -o hello.s
hello.i:hello.c
gcc -E hello.c -o hello.i
.PHONY:
# 删除所有文件
clearall:
rm -rf hello.i hello.s hello.o hello
# 删除编译过程文件
clear:
rm -rf hello.i hello.s hello.o
2.第一个目标文件是我们终极目标
备注:
这样子设计的原因:假如当前文件存在,那么直接从该步骤开始编译
实操:
扩展:
多个文件:circle.c circle.h cube.c cube.h main.c main.h
test:circle.o cube.o main.o
gcc circle.o cube.o main.o -o test
cube.o:cube.c
gcc -C cube.c -o cube.o
main.o:main.c
gcc -C main.c -o main.o
circle.o:circle.c
gcc -C circle.c -o circle.o
.PHONY:
clear:
rm -rf circle.o cube.o main.o test
测试结果:
注意:
微观过程:.c .i .s .o
宏观过程:gcc -c xxx.c -o xxx.o
参考文献: