Mam makefile tak:Jak poprawnie wymazać znak "%" podczas używania wzorców i patsubst w GNU make?
m1:
@echo building m1
m1_:
@echo building m1_
m2:
@echo building m2
m2_:
@echo building m2_
m3_DEPS = m2 m1
SUBSTITUTE=$(patsubst %,%_,$([email protected]_DEPS))
.SECONDEXPANSION:
#%: $$(SUBSTITUTE)
%: $$(patsubst \%,\%_,$$([email protected]_DEPS))
@echo Building [email protected]
@echo Dependencies are $^
Kluczem linia jest
%: $$(patsubst \%,\%_,$$([email protected]_DEPS))
używam zarówno regułę wzoru i patsubst, która sama korzysta oznaki procentowe. Pomyślałem, że mogę uciec z postaci %
z \
, ale nadal nie dostaję oczekiwanego zachowania. Running „make m3” daje wyświetlamy
building m2
building m1
Building m3
Dependencies are m2 m1
Ja jednak oczekiwać, aby uzyskać
building m2_
building m1_
Building m3
Dependencies are m2_ m1_
Wypowiadając się tej linii i wywołanie patsubst
pośrednictwem zmiennej ma w rzeczywistości wytworzenia tejże produkcji.
SUBSTITUTE=$(patsubst %,%_,$([email protected]_DEPS))
%: $$(SUBSTITUTE)
Również ja testowałem że stosując zasadę non-wzór działa, co sprawia, że myślę, że to ma coś wspólnego z interakcji reguł wzorców oraz odsetek objawów:
m3: $$(patsubst %,%_,$$([email protected]_DEPS))
To jakby co ja z ukrycia całą ekspresję w zmiennej, ale w bardziej bezpośredni sposób odpowiada na pytanie. –
Przepraszam, tak, nie zauważyłem, że to zrobiłeś. Właśnie zobaczyłem, że "to nie wydaje się możliwe" i pominąłem resztę. –