Makefile 使用GNU Make'捕获文件名,包括括号;s通配符函数

Makefile 使用GNU Make'捕获文件名,包括括号;s通配符函数,makefile,escaping,gnu-make,Makefile,Escaping,Gnu Make,我将使用Makefile从一组数据目录中渲染一些绘图,以并行化该过程,但在使用通配符函数转义文件名时遇到问题 这是我的Makefile的头文件: SOURCE_DIR = ./results SOURCES = $(wildcard $(SOURCE_DIR)/*cpuonly*) $(wildcard $(SOURCE_DIR)/*cudaonly*) $(warning $(SOURCES)) # for debugging ... 示例目录名为: blahblah-cpuonly-1

我将使用Makefile从一组数据目录中渲染一些绘图,以并行化该过程,但在使用通配符函数转义文件名时遇到问题

这是我的Makefile的头文件:

SOURCE_DIR = ./results
SOURCES = $(wildcard $(SOURCE_DIR)/*cpuonly*) $(wildcard $(SOURCE_DIR)/*cudaonly*)
$(warning $(SOURCES))  # for debugging
...
示例目录名为:

  • blahblah-cpuonly-123
  • blahblah-cudaonly-345
  • blahblah cpuonly-(123567)
这里,警告函数的输出只包括没有括号的目录名。 我怎样才能把带括号的也包括进去

编辑:当然,我可以将文件名更改为不包含括号。但对于这个问题,我只想知道使用括号是否是不可能的


EDIT2:我使用诸如“blablah cpuonly-(123567.log)”之类的文件名对其进行了测试,结果包括它们!但是,执行规则时会导致shell语法错误:(

我无法重现您的问题(我知道括号中没有限制):


我无法重现您的问题(我知道括号没有限制):


它只发生在目录中,而不是文件中。在您的示例中,“foo-(bar,baz).bar”应该是一个目录,以重现我的问题。对于文件,还有另一个问题:使用
$(源代码)执行规则时出现shell语法错误
variable,但这超出了我的问题范围。仅供参考,我在Ubuntu 12.04 LTS.Ah上使用GNU make 3.81,我发现这个问题只有在名称以“)”结尾时才会出现。如果右括号后面还有其他字符,则不会重现问题。这看起来像GNU make 3.81中的一个bug。我可以用GNU make 3.81复制它,但它在GNU make 3.82中工作正常。它只发生在目录中,而不是文件中。在您的示例中,“foo-(bar,baz).bar”应该是重现我的问题的目录。对于文件,还有另一个问题:使用
$(SOURCES)
变量执行规则时出现shell语法错误,但这超出了我的问题范围。仅供参考,我在Ubuntu12.04 LTS.Ah上使用GNU make 3.81,我发现只有当名称以“)”结尾时才会出现此问题。如果右括号后面还有其他字符,则不会重现问题。这看起来像GNU make 3.81中的一个bug。我可以用GNUmake3.81复制它,但它可以用GNUmake3.82正确工作。
$ cat Makefile
foo := $(wildcard *foo*)
$(info foo = $(foo))
all: ;:

$ ls -1 *foo*
foo
foo-(bar,baz).bar
foo.mk

$ make
foo = foo foo-(bar,baz).bar foo.mk
: