以下均来自
收集,自己整理了一下,只整理了以前不熟悉,而目前会用到的一些东西:
一:Makefile中
定义的方式:
1.递归展开方式,递归展开方式定义的变量是在引用在该变量时进行替换的,即如果该变量包含了对其他变量的
,则在引用该变量时一次性将内嵌的变量全部展开,虽然这种类型的变量能够很好地完成
的指令,但是它也有严重的缺点,如不能在变量后追加内容(因为语句:CFLAGS = $(CFLAGS) -O在变量扩展过程中可能导致无穷循环)。
2.简单方式。用:=定义。为了避免上述问题,简单扩展型变量的值在定义处展开,并且只展开一次,因此它不包含任何对其它变量的引用,从而消除变量的嵌套引用。
3.用?=定义变量,它的含义是如果变量还没定义 ,即如果用户不定义,就提供给他默认的。
举例说明递归展开与简单方式定义的区别:
CFLAGS:=-Wall CFLAGS:=$(CFLAGS) all: echo $(CFLAGS) 对于以上,执行make后echo输出-Wall CFLAGS=-Wall CFLAGS=$(CFLAGS) all: echo $(CFLAGS)
执行make后echo输出:Makefile:2:***Recursive variable `CFLAGS
|
GNU make 的主要预定义变量:
预定义变量 含义
$* 不包含扩展名的目标
名称。
$+ 所有的依赖文件,以空格分开,并以出现的先后为序,可能包含重复的依赖文件。
$< 第一个依赖文件的名称。
$? 所有的依赖文件,以空格分开,这些依赖文件的修改日期比目标的创建日期晚。
$@ 目标的完整名称。
$^ 所有的依赖文件,以空格分开,不包含重复的依赖文件。
$% 如果目标是归档成员,则该变量表示目标的归档成员名称。例如,如果目标名称
为 mytarget.so(image.o),则 $@ 为 mytarget.so,而 $% 为 image.o。
AR 归档维护程序的名称,默认值为 ar。
ARFLAGS 归档维护程序的选项。
AS 汇编程序的名称,默认值为 as。
ASFLAGS 汇编程序的选项。
CC C 编译器的名称,默认值为 cc。
CCFLAGS C 编译器的选项。
CPP C 预编译器的名称,默认值为 $(CC) -E。
CPPFLAGS C 预编译的选项。
CXX C++ 编译器的名称,默认值为 g++。
CXXFLAGS C++ 编译器的选项。
FC FORTRAN 编译器的名称,默认值为 f77。
FFLAGS FORTRAN 编译器的选项。
参考:
阅读(1501) | 评论(0) | 转发(0) |