Linux makefile改进

来源:互联网 发布:阿里云升级配置后 编辑:程序博客网 时间:2024/05/21 22:34

接着http://blog.csdn.net/a158337/article/details/39084725,继续学习makefile的改进。

改进版本一:使用变量

OBJ=main.o tool1.o tool2.omake:$(OBJ)        gcc -o main $(OBJ)main.o:main.c tool1.h tool2.h        gcc -c main.ctool1.o:tool1.c tool1.h        gcc -c tool1.ctool2.o:tool2.c tool2.h        gcc -c tool2.cclean:        rm -f main $(OBJ)

1.变量介绍

Makefile里面的变量分为自定义变量,预定义变量,自动变量和环境变量。里面你的OBJ就是自定义变量,预定义变量是通常在Makefile经常出现的变量,其中部分有默认值,在M

akefiled里的定义的变量就像C语言里的宏定义,代表了一个文本字符串,在make的时候会自动在引用的位置展开内容,预定义变量定义了常见的编译器,汇编器的名称,及其编

译选项,自定义变量声明时候需要赋初始值,使用的时候用$符号,变量定义的时候一般是 变量名=变量值,变量值不一定是要定义好的,也可以是定义在文件的任何地方,包括后

面用到的,也可以把等号换成“:=”

2.变量使用规则:

1.make 变量,make里面定义的或者是make的环境变量,需要引用 $( 变量)

2.出现在规则命令里面的shell变量,这些变量不属于Makefile而是一个shell变量,引用使用shell的$tmp

3.对于命令行出现的make变量也是使用$( 变量)

改进版本2:自动推导

CC=gccOBJ=main.o tool1.o tool2.omake:$(OBJ)        $(CC) -o main $(OBJ)main.o:tool1.h tool2.htool1.o:tool1.htool2.o:tool2.h.PHONY: cleanclean:        rm -f main $(OBJ) 
让make自动推导,make只要看到一个.o文件,就会把对应的.c文件添加到依赖文件里面,并且gcc -c *.c也会被推导出来,所以简化了makefile。

改进版本3:自动变量$^ $< $@的使用

CC=gccOBJ=main.o tool1.o tool2.omain:$(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:cleanclean:        rm -f main $(OBJ)             

 $^表示依赖中的所有参数, $<表示依赖中的第一个参数,$@表示目标集




0 0
原创粉丝点击