Makefile ';上的生成文件问题%';
我编写了一个简单的makefile,它将所有.txt文件从/src复制到/dest目录。但它不起作用 我想问题出在“%”附近,但我找不到它。你能帮我吗 生成文件:Makefile ';上的生成文件问题%';,makefile,Makefile,我编写了一个简单的makefile,它将所有.txt文件从/src复制到/dest目录。但它不起作用 我想问题出在“%”附近,但我找不到它。你能帮我吗 生成文件: all:dest/%.txt dest/%.txt: src/%.txt @[ -d dest ] || mkdir dest cp $< $@ all:dest/%.txt dest/%.txt:src/%.txt @[-d dest]| mkdir dest cp$
all:dest/%.txt
dest/%.txt: src/%.txt
@[ -d dest ] || mkdir dest
cp $< $@
all:dest/%.txt
dest/%.txt:src/%.txt
@[-d dest]| mkdir dest
cp$<$@
错误信息:
make:**没有规则使目标dest/%.txt'成为all'所需的。停下来
===============================
谢谢你的回答!现在我明白了这个makefile的作用。如果我将第一行修改为“all:dest/a.txt”,同时src/目录中有一个.txt。它只会将src/a.txt复制到dest/a.txt,而不是复制src/中的所有文件。您不需要通配符
all:
cp src/*.txt dest/
您可以将%
表示法与通用方法一起使用,例如将C文件编译成目标文件的规则
你不能像你想做的那样在目标中使用它
考虑在dest
目录中没有.txt
文件的情况。没有什么可以告诉make
它应该将哪些文件复制到目录中
我倾向于使用老式的make
,并且在makefile
中不使用通配符。因此,我会在目录中列出我想要的文件,并编写一个条件复制规则 这会在每次更改源文件时都复制每个文件。这只是一个示例,而不是“复制/粘贴”的使用,这会降低回答的实用性。你不是说先决条件而不是目标吗?每个模式规则的目标中必须有一个%
。问题在于第一条规则中的%
,它没有被解释为模式规则,因为目标缺少%
@reinierpost:我指的是目标all
,尽管符号被用作目标的依赖项或先决条件。这有点值得讨论,对不起。我同意先决条件可能是这里最准确的术语,但我不认为target的使用有足够的问题值得关注。