有没有办法让 GNU make 正确处理包含冒号的文件名?
我遇到的具体问题恰好涉及模式规则。这是一个不依赖于剪切和粘贴制表符的简化版本:
% make --version
GNU Make 3.81
Copyright (C) 2006 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.
There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A
PARTICULAR PURPOSE.
This program built for x86_64-redhat-linux-gnu
% cat Makefile
COLON := \:
all: ; true
%.bar: ; cp $< $@
x.bar: x.foo
%.foo: ; touch $@
a$(COLON)b.bar: a$(COLON)b.foo
all: x.bar a$(COLON)b.bar
clean: ; rm -f *.foo *.bar
% make clean
rm -f *.foo *.bar
% make
touch x.foo
cp x.foo x.bar
cp a\:b.bar
cp: missing destination file operand after `a:b.bar'
Try `cp --help' for more information.
make: *** [a\:b.bar] Error 1
将 $(COLON) 替换为文字 : 会产生完全相同的结果。如果没有反斜杠,它会执行以下操作:
Makefile:6: *** target pattern contains no `%'. Stop.
我怀疑这可能:参见关于 Makefile 中冒号的讨论 http://lists.gnu.org/archive/html/bug-make/2004-10/msg00010.html。总之,GNU make 从来不能很好地处理包含空格或冒号的文件名。维护者 Paul D. Smith 表示,增加对转义的支持往往会破坏现有的 makefile http://lists.gnu.org/archive/html/help-make/2004-06/msg00146.html。此外,添加此类支持需要对代码进行重大更改。
您也许可以通过某种令人讨厌的临时文件安排来解决问题。
祝你好运!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)