全部博文(489)
分类:
2011-12-29 12:59:41
原文地址:Linux的MakeFile自动变量 作者:huangxb_csu
$@
表示规则的目标文件名。如果目标是一个文档文件(Linux中,一般称.a文件为
文档文件,也称为静态库文件) ,那么它代表这个文档的文件名。在多目标模式
规则中,它代表的是哪个触发规则被执行的目标文件名。
$^
规则的所有依赖文件列表,使用空格分隔。如果目标是静态库文件,它所代表的
只能是所有库成员(.o文件)名。一个文件可重复的出现在目标的依赖中,变量
“$^”只记录它的一次引用情况。就是说变量“$^”会去掉重复的依赖文件。
$<
规则的第一个依赖文件名。如果是一个目标文件使用隐含规则来重建,则它代表
由隐含规则加入的第一个依赖文件。
$?
所有比目标文件更新的依赖文件列表,空格分割。如果目标是静态库文件名,代
表的是库成员(.o文件)。
$%
当规则的目标文件是一个静态库文件时,代表静态库的一个成员名。例如,规则
的目标是“foo.a(bar.o)”,那么,“$%” 的值就为 “bar.o”,“$@”的值为“foo.a”。
如果目标不是静态库文件,其值为空。
模式规则类似于普通规则。只是在模式规则中,目标名中需要包含有模式字符“%”
(一个),包含有模式字符“%”的目标被用来匹配一个文件名,“%”可以匹配任何非
空字符串。
在模式规则中,目标文件是一个带有模式字符“%”的文件,使用模式来匹配目标
文件。文件名中的模式字符“%”可以匹配任何非空字符串,除模式字符以外的部分要
求一致。例如: “%.c”匹配所有以“.c”结尾的文件(匹配的文件名长度最少为3个字
母),
首先看编译.c文件到.o文件的隐含模式规则:
%.o : %.c
$(CC) -c $(CFLAGS) $(CPPFLAGS) $< -o $@
此规则描述了一个.o文件如何由对应的.c文件创建。规则的命令行中使用了自动化变量
“$<”和“$@” ,其中自动化变量“$<”代表规则的依赖, “$@”代表规则的目标。
此规则在执行时,命令行中的自动化变量将根据实际的目标和依赖文件取对应值。