makefile 静态模式

本文深入解析Makefile中的静态模式规则,展示如何通过简单的规则高效管理大量目标文件,提高编译效率。通过具体示例,解释目标文件、目标模式及依赖模式的概念,并演示自动化变量的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

静态模式可以更加容易地定义多目标的规则,可以让我们的规则变得更加的有弹性和灵

。我们还是先来看一下语法:
<targets …>: : <prereq-patterns …>


targets 定义了一系列的目标文件,可以有通配符。是目标的一个集合。
target-parrtern 是指明了 targets 的模式,也就是的目标集模式。
prereq-parrterns 是目标的依赖模式,它对 target-parrtern 形成的模式再进行一次依赖
目标的定义。
看一个例子:
objects = foo.o bar.o
all: $(objects)
$(objects): %.o: %.c
$(CC) -c $(CFLAGS) $< -o @上面的例子中,指明了我们的目标从@ 上面的例子中,指明了我们的目标从@object 中获取,“%.o”表明要所有以“.o”结
尾的目标,也就是“foo.o bar.o”,也就是变量object集合的模式,而依赖模式“则取模式“依赖目标就是“foo.cbar.c”。而命令中的“object 集合的模式,而依赖模式“%.c” 则取模式“%.o”的“%”,也就是“foo bar”,并为其加下“.c”的后缀,于是,我们的 依赖目标就是“foo.c bar.c”。而命令中的“objectfoo.cbar.c<”和“@”则是自动化变量,“@”则是自动化变量,“@<”表示
所有的依赖目标集(也就是“foo.c bar.c”), “$@”表示目标集(也就是“foo.o bar.o”)。
于是,上面的规则展开后等价于下面的规则:
foo.o : foo.c
$(CC) -c $(CFLAGS) foo.c -o foo.o
bar.o : bar.c
$(CC) -c $(CFLAGS) bar.c -o bar.o
试想,如果我们的“%.o”有几百个,那种我们只要用这种很简单的“静态模式规则”
就可以写完一堆规则,实在是太有效率了。“静态模式规则”的用法很灵活,如果用得好,
那会一个很强大的功能。再看一个例子
files = foo.elc bar.o lose.o
(filter(filter %.o,(filter(files)): %.o: %.c
$(CC) -c $(CFLAGS) $< -o $@
(filter(filter %.elc,(filter(files)): %.elc: %.el
emacs -f batch-byte-compile $<
(filter(filter %.o,(filter(files))表示调用 Makefile 的 filter 函数,过滤“$filter”集,只要其
中模式为“%.o”的内容。其的它内容,我就不用多说了吧。这个例字展示了 Makefile 中更
大的弹性

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值