我有一个如下的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))