2016-03-22 45 views
0

我写了一个简单的makefile,它将所有.txt文件从/ src复制到/ dest目录。但它不起作用。'%'上的makefile问题

我想问题是'%'左右,但我找不到它。你可以帮我吗?

的Makefile文件:

all:dest/%.txt 

dest/%.txt: src/%.txt 
    @[ -d dest ] || mkdir dest 
    cp $< [email protected] 

错误信息: 化妆:***没有规则,使目标dest/%.txt', needed by所有”。停止。

===============================

感谢所有的答案!现在我明白了这个makefile的功能。如果我将第一行修改为“all:dest/a.txt”,同时在src /目录中有一个.txt文件。它只会将src/a.txt复制到dest/a.txt,而不是复制src /中的所有文件。

回答

0

你不需要通配符。

all: 
    cp src/*.txt dest/ 
+1

这会每次复制每个文件,而不仅仅是更改源文件。 –

+0

仅仅是一个例子,而不是“复制/粘贴”使用 – Joel

+1

这使得这个* less *有用的答案。 –

0

您可以使用%符号与通用的配方,如用于编译C文件到目标文件的规则。

你不能在你想要做的目标中使用它。

考虑在dest目录中没有.txt文件的情况。没有什么可告诉make它应该将哪些文件复制到目录中。

我倾向于与老派make合作,并且我在makefile中没有使用通配符。所以,我会在目录中列出我想要的文件并编写条件复制规则。

+0

您是不是指*先决条件*而不是*目标*?每个模式规则*必须在其目标中有一个'%'。问题在于第一条规则中的'%',它不被解释为模式规则,因为目标*缺少*%'。 – reinierpost

+0

@reinierpost:我指的是“all”,即目标,尽管该符号被用作目标的依赖或前提条件。有点争论。 –

+0

你的措辞对我来说似乎不对。 – reinierpost