程序编译的执行过程
预处理 把.h .c文件展开形成一个文件
gcc -E first.c -o first.i
汇编 生成一个汇编文件
gcc -S first.i -o first.S
编译 生成一个.o文件
gcc -o first.S -o first.o
连接 将.o文件生成一个可执行文件
gcc first.o -o first
在当前目录下创建文件名为makefile的文件
最简单的makfile
first:first.o
gcc -o first first.o
first.o:first.S
gcc -o first.o -c first.S
first.S:first.i
gcc -o first.S -S first.i
first.i:first.c
gcc -o first.i -E first.c
添加伪目标
命令行中执行 make cleanall 或者 make clean
# 第一个文件是我的目标,很像递归
first:first.o
gcc -o first first.o
first.o:first.S
gcc -o first.o -c first.S
first.S:first.i
gcc -o first.S -S first.i
first.i:first.c
gcc -o first.i -E first.c
# 伪目标
.PHONY:
cleanall:
rm -rf first.i first.S first.o first
clean:
rm -rf first.i first.S first.o
添加变量
CC = gcc #替换
CC += -o #追加
RM := rm -rf #恒等于
first:first.o
$(CC) first first.o
first.o:first.S
$(CC) first.o -c first.S
first.S:first.i
$(CC) first.S -S first.i
first.i:first.c
$(CC) first.i -E first.c
# 伪目标
.PHONY:
cleanall:
$(RM) first.i first.S first.o first
clean:
$(RM) first.i first.S first.o
编译大量文件时使用
将当前目录下的first.c 、second.c、third.c文件编译
使用%
%.o :%.c 任意的.c编译为.o
使用*
.o :.c所有的.c编译为.o
$^为所有的依赖文件 $@为所有的目标文件
具体使用方法:
CC = gcc
# CC += gcc -o
CC += -o
RM := rm -rf
all: first second third
%:%.c
$(CC) $@ $^
# 伪目标
.PHONY:
cleanall:
$(RM) first.i first.S first.o first
clean:
$(RM) first.i first.S first.o