Makefile GNU是否提供支持';%';在文件名中?

Makefile GNU是否提供支持';%';在文件名中?,makefile,gnu-make,Makefile,Gnu Make,在GNU Make中,是否可能对文件名中包含%的文件具有依赖关系?我有这样的想法: foo: results(10%).dat gnuplot config.plt 当然,我可以选择一个不同的文件名,但如果知道是否应该始终避免使用%,或者是否有一种简单的方法来逃避它,那就太好了(我已经尝试过\,\\,%,但运气不佳) 编辑:我的问题似乎更微妙。由于匹配和百分比文件名的组合,它似乎不起作用: all: foo.txt bar.txt PERCENT := % foo%txt bar%

在GNU Make中,是否可能对文件名中包含
%
的文件具有依赖关系?我有这样的想法:

foo: results(10%).dat
    gnuplot config.plt
当然,我可以选择一个不同的文件名,但如果知道是否应该始终避免使用
%
,或者是否有一种简单的方法来逃避它,那就太好了(我已经尝试过
\
\\
%
,但运气不佳)

编辑:我的问题似乎更微妙。由于匹配和百分比文件名的组合,它似乎不起作用:

all: foo.txt bar.txt

PERCENT := %

foo%txt bar%txt: results(10$(PERCENT)).dat
    touch foo$*txt bar$*txt
此操作失败,但如果文件名没有
%
则可以。

您可以尝试:

PERCENT := %
foo: results(10$(PERCENT)).dat
    gnuplot config.plt

(如果
gnuplot
之前的空格实际上是制表符)。

百分比字符在正常规则中是可以的,就像您发布的第一条规则一样,它应该按原样工作

对于第二个示例,似乎没有任何理由需要模式规则:

targets := foo.txt bar.txt

.PHONY: all
all: $(targets)

$(targets): results(10%).dat
    touch $(targets)
%
可以在静态模式规则中转义

$(targets): %.txt: \%%.txt #dependencies will be %foo.txt and %bar.txt respectively

但是,似乎没有任何方法可以像您的第二个示例那样,在隐式模式规则中逃脱
%

我刚刚遇到了一个类似的问题。。。我有一个目录,其中有一个“%”字符,Make应该处理这些目录中的文件列表。它停在第一个。取出%后,它就可以正常工作了。你找到根本原因了吗?实际上我一直在用一个类似的变量来逃避这个问题,然后又遇到了这个问题,我挠头了一段时间,直到发现问题实际上是在同一个目标中有括号。您的是一个依赖项名称,因此可能不会遇到相同的问题,但不要尝试使用
$