Makefile GNU是否提供支持';%';在文件名中?
在GNU Make中,是否可能对文件名中包含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%
%
的文件具有依赖关系?我有这样的想法:
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应该处理这些目录中的文件列表。它停在第一个。取出%后,它就可以正常工作了。你找到根本原因了吗?实际上我一直在用一个类似的变量来逃避这个问题,然后又遇到了这个问题,我挠头了一段时间,直到发现问题实际上是在同一个目标中有括号。您的是一个依赖项名称,因此可能不会遇到相同的问题,但不要尝试使用$