我目前正在学习如何使用makefile。但我正在努力应对%模式规则。我把失败的makefile简化为这个非常简单的例子:
我用以下内容填充空目录:
echo aaa > a.in && echo bbb > b.in
像这样的第一个makefile非常有效:
a.out : a.in
cat $< > $@
作为
make && echo *.out && cat *.out
返回
cat a.in > a.out
a.out
aaa
但是当我尝试使用模式规则修改makefile时如下:
%.out : %.in
cat $< > $@
然后返回我:
make: *** No targets. Stop.
这似乎是一个非常简单的问题,但我无法达到我所缺少的......
答案 0 :(得分:1)
如果你的makefile没有目标列表(只有模式),而你只需输入make
,那么你就没有告诉它应该构建任何具体的东西,所以它不会做任何事。
模式规则并不代表&#34;去查找与此模式匹配的所有文件并构建它们&#34;。模式规则告诉make&#34;如果你需要找到一种方法来构建一个与这个目标模式匹配的文件,那么这就是你如何做到这一点&#34;。
如果您输入make a.out
,那么make知道您要构建目标a.out
,那么make将使用您的模式规则来构建它。
或者,您可以将目标添加到makefile中,如下所示:
.PHONY: all
all: a.out
%.out : %.in
cat $< > $@