GNU make on Mint (Ubuntu Linux) 简单模式规则给出:"no targets"
GNU make on Mint (Ubuntu Linux) Simple Pattern rule gives: "no targets"
这个 Makefile 有什么问题?
我有三个后缀为 .z 的文件,我想制作 3 个后缀为 .x 的同名文件。
(我正在尝试让 GNU make 模式规则起作用;任何模式规则...:(!)
ls *.z
doll.z dummy.z puppet.z
cat -t all.mk
.SUFFIXES:
.SUFFIXES: .x .z
%.x:^I%.z
^Iecho 'Pre-req' $< makes target $@
^Icp $< $@
make -f all.mk
make: *** No targets. Stop.
模式规则是一个模板。它告诉 make,“如果你想构建一个像这样的目标并且没有明确的规则去做,这里是如何做的”。
模式规则不是指令:它不会说“去文件系统中搜索可以使用此模式构建的所有可能目标并构建它们”。
因此,您已经创建了一个模板,make 可以 用于根据 .z
先决条件构建 .x
目标,但是,正如错误消息所说,您实际上并没有要求 make 构建任何东西。
要让 make 构建某些东西,您必须请求构建一些东西。一种方法是通过命令行,如上面的评论所述:
make -f all.mk doll.x
现在 make 知道您想要构建 doll.x
,因此它会寻找实现该目标的方法,并找到您的模式规则。或者你可以将它放入 makefile 本身,就像这样(all
是“构建东西”的传统目标名称,但你可以使用任何你喜欢的名称):
.PHONY: all
all: doll.x dummy.x puppet.x
或者您甚至可以确定要动态构建的内容,如下所示:
.PHONY: all
all: $(patsubst %.z,%.x,$(wildcard *.z))
这个 Makefile 有什么问题? 我有三个后缀为 .z 的文件,我想制作 3 个后缀为 .x 的同名文件。 (我正在尝试让 GNU make 模式规则起作用;任何模式规则...:(!)
ls *.z
doll.z dummy.z puppet.z
cat -t all.mk
.SUFFIXES:
.SUFFIXES: .x .z
%.x:^I%.z
^Iecho 'Pre-req' $< makes target $@
^Icp $< $@
make -f all.mk
make: *** No targets. Stop.
模式规则是一个模板。它告诉 make,“如果你想构建一个像这样的目标并且没有明确的规则去做,这里是如何做的”。
模式规则不是指令:它不会说“去文件系统中搜索可以使用此模式构建的所有可能目标并构建它们”。
因此,您已经创建了一个模板,make 可以 用于根据 .z
先决条件构建 .x
目标,但是,正如错误消息所说,您实际上并没有要求 make 构建任何东西。
要让 make 构建某些东西,您必须请求构建一些东西。一种方法是通过命令行,如上面的评论所述:
make -f all.mk doll.x
现在 make 知道您想要构建 doll.x
,因此它会寻找实现该目标的方法,并找到您的模式规则。或者你可以将它放入 makefile 本身,就像这样(all
是“构建东西”的传统目标名称,但你可以使用任何你喜欢的名称):
.PHONY: all
all: doll.x dummy.x puppet.x
或者您甚至可以确定要动态构建的内容,如下所示:
.PHONY: all
all: $(patsubst %.z,%.x,$(wildcard *.z))