一.下面是最简单的Makefile编译规则
#下面一句是说可执行文件main生成依赖于 one.c 和two.c
main : one.c two.c
gcc -o main one.o two.o #这句是通过one.o和two.o生成可执行文件main的命令
#下面一句是说one.o生成依赖于one.c
one.o : one.c
gcc -c one.c #这句是通过one.c生成可one.o文件的命令
#下面一句是说one.o生成依赖于two.c
two.o : two.c
gcc -c two.c #这句是通过one.c生成可one.o文件的命令
#下面一句是说如果你在终端输入命令make clean 会自动帮你执行rm one.o, rm two.o, rm main
clean :
rm one.o
rm two.o
rm main
二.下面是优化后的Makefile
#下面这句话是说定义一个变量叫obj可以用来替换one.o 和two.o
obj = one.o two.o
#下面一句话说执行文件main生成依赖于obj代表的东西 (注意:后的语句和$<的相关性)
main : $(obj)
gcc $< -o main #这局同于gcc -o main $< 也同 gcc $(obj) -o main 也同于 gcc -o main $(obj)
%.o :%.c
gcc -c $< #这句等同于gcc -c *.c
#当工程文件中有clean的文件,make clean将会失效,这时候定义clean为伪目标可#以避免该类
#问 题出现
.PHONY : clean
clean:
-rm *.o #在rm前面加 - 是不管出错没有都继续向下执行
-rm main
三.Makefile中的赋值符号
对于同一个变量:
- =取决于最后一次赋值
- :=不会使用后面的定义只会用前面的,谁先赋值用谁
- ?=如果之前已经赋值过现在就不赋值了,之前没有赋值现在就赋值
- +=追加,在之前变量的内容中追加新的内容,让他能代表更多的意义
今天只是总结了最基础的规则以后有空再继续补充



