Makefile ';上的生成文件问题%';

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$

我编写了一个简单的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$<$@
错误信息: 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的使用有足够的问题值得关注。