gpt4 book ai didi

makefile - 在 GNU make 中使用模式规则和 patsubst 时如何正确转义 "%"符号?

转载 作者:行者123 更新时间:2023-12-02 11:08:44 25 4
gpt4 key购买 nike

我有一个如下所示的 makefile:

m1:
@echo building m1

m1_:
@echo building m1_


m2:
@echo building m2

m2_:
@echo building m2_

m3_DEPS = m2 m1

SUBSTITUTE=$(patsubst %,%_,$($@_DEPS))
.SECONDEXPANSION:

#%: $$(SUBSTITUTE)
%: $$(patsubst \%,\%_,$$($$@_DEPS))
@echo Building $@
@echo Dependencies are $^

关键是

%:  $$(patsubst \%,\%_,$$($$@_DEPS))

我同时使用模式规则和 patsubst,它本身使用百分号。我以为我可以用 \ 转义 % 字符,但我仍然没有得到预期的行为。运行“make m3”给出输出

building m2
building m1
Building m3
Dependencies are m2 m1

但是,我希望得到

building m2_
building m1_
Building m3
Dependencies are m2_ m1_

注释掉该行并通过变量间接调用 patsubst 实际上会产生该输出。

SUBSTITUTE=$(patsubst %,%_,$($@_DEPS))

%: $$(SUBSTITUTE)

另外,我已经测试过使用非模式规则是有效的,这让我认为这与模式规则和百分号的交互有关:

m3:  $$(patsubst %,%_,$$($$@_DEPS))

最佳答案

makefile 上下文中的

\ 用于行继续,而不是“转义”。为了逃避一些事情,你可以将它们隐藏在变量中:

PERCENT := %

这个想法是,在解析 makefile 片段时转义字符有意义的地方,您对其进行转义。

因此,在您的情况下,您必须使用 $$(PERCENT):

$$(patsubst $$(PERCENT),$$(PERCENT)_,$$($$@_DEPS))

关于makefile - 在 GNU make 中使用模式规则和 patsubst 时如何正确转义 "%"符号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19232784/

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