全部博文(395)
分类: LINUX
2011-07-23 19:24:23
关于make中的自动变量和预定义变量,我想在linux下make相关的文件中找到其定义,可是在网上搜了半天,一直找不到,真是气煞我也。。。。我特别想要知道的是这2个预定义变量:CC,CFLAGS,,因为这两个变量经常出现,并且这个CFLAGS,如果我在makefile中不赋值的话,就一直不知道(应该是一个空,就是遇到这个字符的话,就认为是个空格吧),可是这儿CC,我在makefile中:echo $CC 最后观察是cc,但是在哪定义呀。。。。
那就等到将来自己水平高了再找吧。。。
下面
make的自动变量
$@ 规则目标的文件名.如果目标是档案文件的一个成员,"$@"就是档案文件的名称
$% 当目标是档案文件的一个成员时,"$%"是该成员的名称.否则"$%"为空
$< 第一个依赖文件的名称
$? 以空格隔开的比目标新的所有依赖文件名.若依赖文件是档案文件的成员,只使用成员的名称
$^ 以空格隔开的所有依赖文件名.若依赖文件是档案文件的成员,只使用成员名称.无论一个依赖文件出现过多少次,"$^"值中只包含其名称的一个拷贝
$+ 与"$^"相似,但多次列出的依赖文件按照它们在构造文件中出现的顺序复制.这对于链接命令中以特定顺序重复出现的库文件名有作用
$* 隐含规则匹配的词干.若目标为"dir/a.foo.b"且目标模式为"a.%.b",则词干为"dir/foo".对静态模式规则,词干是文件名中与目标模式中"%"匹配的部分.应避免在隐含规则或静态模式规则之外使用"$*"
$(@D) 删除结尾斜杠的目标文件名的目录部分.若"$@"的值为"dir/foo.o",则"$(@D)"为"dir".若"$@"不包含斜杠,则"$(@D)"为"."
$(@F) 目标文件名中目录下的文件部分.如果"$@"的值为"dir/foo.o",那么"$(@F)"为"foo.o".它等同于"$(notdir $@)"
$(*D) 词干中的目录部分,例如上例中的"dir"
$(*F) 词干中的目录下文件部分,例如上例中的"foo"
$(%D) 目标档案文件成员的目录部分.仅对形为"archive(member)"的档案文件成员目标有意义,且仅在member包含目录名时有用
$(%F) 目标档案文件成员中的目录下文件部分
$(
$(^F) 所有依赖文件的目录下文件部分
$(?D) 比目标新的所有依赖文件的目录部分
$(?F) 比目标新的所有依赖文件的目录部分
make的预定义变量
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编译器的选项。