接着http://blog.csdn.net/a158337/article/details/39084725,继续学习makefile的改进。
改进版本一:使用变量
OBJ=main.o tool1.o tool2.o
make:$(OBJ)
gcc -o main $(OBJ)
main.o:main.c tool1.h tool2.h
gcc -c main.c
tool1.o:tool1.c tool1.h
gcc -c tool1.c
tool2.o:tool2.c tool2.h
gcc -c tool2.c
clean:
rm -f main $(OBJ)
1.变量介绍
Makefile里面的变量分为自定义变量,预定义变量,自动变量和环境变量。里面你的OBJ就是自定义变量,预定义变量是通常在Makefile经常出现的变量,其中部分有默认值,在Makefiled里的定义的变量就像C语言里的宏定义,代表了一个文本字符串,在make的时候会自动在引用的位置展开内容,预定义变量定义了常见的编译器,汇编器的名称,及其编
译选项,自定义变量声明时候需要赋初始值,使用的时候用$符号,变量定义的时候一般是 变量名=变量值,变量值不一定是要定义好的,也可以是定义在文件的任何地方,包括后
面用到的,也可以把等号换成“:=”
2.变量使用规则:
1.make 变量,make里面定义的或者是make的环境变量,需要引用 $( 变量)
2.出现在规则命令里面的shell变量,这些变量不属于Makefile而是一个shell变量,引用使用shell的$tmp
3.对于命令行出现的make变量也是使用$( 变量)
改进版本2:自动推导
CC=gcc
OBJ=main.o tool1.o tool2.o
make:$(OBJ)
$(CC) -o main $(OBJ)
main.o:tool1.h tool2.h
tool1.o:tool1.h
tool2.o:tool2.h
.PHONY: clean
clean:
rm -f main $(OBJ)
让make自动推导,make只要看到一个.o文件,就会把对应的.c文件添加到依赖文件里面,并且gcc -c *.c也会被推导出来,所以简化了makefile。
改进版本3:自动变量$^ $< $@的使用
CC=gcc
OBJ=main.o tool1.o tool2.o
main:$(OBJ)
$(CC) -o $@ $^
main.o:main.c tool1.h tool2.h
$(CC) -c $<
tool1.o:tool1.c tool1.h
$(CC) -c $<
tool2.o:tool2.c tool2.h
$(CC) -c $<
.PHONY:clean
clean:
rm -f main $(OBJ)
$^表示依赖中的所有参数, $<表示依赖中的第一个参数,$@表示目标集