makefile中的简单推理规则

时间:2014-08-10 00:17:19

标签: makefile

我目前正在学习如何使用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.

这似乎是一个非常简单的问题,但我无法达到我所缺少的......

1 个答案:

答案 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 $< > $@