gpt4 book ai didi

unix - 在Makefile中的文件名中转义冒号

转载 作者:行者123 更新时间:2023-12-03 14:56:06 25 4
gpt4 key购买 nike

有没有一种方法可以使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.

最佳答案

这里的答案似乎都太复杂了,无法提供帮助。我终于找到了解决方案here

colon := :
$(colon) := :


然后使用文件名中的宏作为:

filename$(:)


经评估成功转换为“文件名:”。

关于unix - 在Makefile中的文件名中转义冒号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2052406/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com