makefile静态模式

静态模式规则的基本语法:
TARGETS ...: TARGET-PATTERN: PREREQ-PATTERNS ...
	COMMANDS
	...
“ TAGETS”列出了此规则的一系列目标文件。像普通规则的目标一样可以包含通配符。
“TAGET-PATTERN”和“ PREREQ-PATTERNS”说明了如何为每一个目标文件生成依赖文
件。从目标模式( TAGET-PATTERN)的目标名字中抽取一部分字符串(称为“茎”)。使用“茎”
替代依赖模式( PREREQ-PATTERNS)中的相应部分来产生对应目标的依赖文件。
首先在目标模式和依赖模式中,一般需要包含模式字符“%”。在目标模式( TAGET-PATTERN)
中“%”可以匹配目标文件的任何部分,模式字符“%”匹配的部分就是“茎”。目标文件和目标
模式的其余部分必须精确的匹配。看一个例子:目标“foo.o”符合模式“%.o”,其“茎”为“foo”。
而目标“foo.c”和“foo.out”就不符合此目标模式。
每一个目标的依赖文件是使用此目标的“茎”代替依赖模式( PREREQ-PATTERNS)中的模
式字符“%”而得到。例如:上边的例子中依赖模式( PREREQ-PATTERNS)为“%.c”,那么使
用“茎”“foo”替代依赖模式中的“%”得到的依赖文件就是“foo.c”。需要明确的一点是:在模
式规则的依赖列表中使用不包含模式字符“%”也是合法的。代表这个文件是所有目标的依赖文件。

我们来看一个例子,它根据相应的.c 文件来编译生成“foo.o”和“bar.o”文件:
objects = foo.o bar.o
all: $(objects)
$(objects): %.o: %.c
$(CC) -c $(CFLAGS) $< -o $@
例子中,规则描述了所有的.o文件的依赖文件为对应的.c文件,对于目标“foo.o”,取其茎“foo”
替代对应的依赖模式“%.c”中的模式字符“%”之后可得到目标的依赖文件“foo.c”。这就是目
标“foo.o”的依赖关系“foo.o: foo.c”
在使用静态模式规则时,指定的目标必须和目标模式相匹配,否则在执行make时将会得到一
个错误提示。如果存在一个文件列表,其中一部分符合某一种模式而另外一部分符合另外一种模式,
这种情况下我们可以使用“filter”函数(可参考 第七章 make的内嵌函数)来对这个文件列表进
行分类,在分类之后对确定的某一类使用模式规则。例如:
files = foo.elc bar.o lose.o
$(filter %.o,$(files)): %.o: %.c
$(CC) -c $(CFLAGS) $< -o $@
$(filter %.elc,$(files)): %.elc: %.el
emacs -f batch-byte-compile $<
其中; $(filter %.o,$(files))的结果为“bar.o lose.o”。“filter”函数过滤不符合“%.o”模式的
文件名返回所有符合此模式的文件列表。第一条静态模式规则描述了这些目标文件是通过编译
对应的.c 源文件来重建的。同样第二条规则也是使用这种方式。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值