Makefile 使用GNU Make'捕获文件名,包括括号;s通配符函数
我将使用Makefile从一组数据目录中渲染一些绘图,以并行化该过程,但在使用通配符函数转义文件名时遇到问题 这是我的Makefile的头文件: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
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
: