次のようなメイクファイルがあります。
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))