Ho un makefile come la seguente:Come scappare correttamente il segno "%" quando si usano le regole del modello e patsubst in 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 $^
La linea fondamentale è
%: $$(patsubst \%,\%_,$$([email protected]_DEPS))
Sto usando sia una regola di modello e patsubst, che a sua volta utilizza i segni di percentuale. Ho pensato di poter sfuggire al carattere %
con un \
, ma non riesco ancora a ottenere il comportamento previsto. Esecuzione di "fare m3" dà l'uscita
building m2
building m1
Building m3
Dependencies are m2 m1
Tuttavia, mi aspetto di ottenere
building m2_
building m1_
Building m3
Dependencies are m2_ m1_
Commentando fuori quella linea e chiamando patsubst
indirettamente attraverso una variabile che effettivamente produce tale uscita.
SUBSTITUTE=$(patsubst %,%_,$([email protected]_DEPS))
%: $$(SUBSTITUTE)
Inoltre, ho provato che l'utilizzo di una regola di non-modello funziona, che mi fa pensare che sia qualcosa a che fare con l'interazione di regole di pattern e segni di percentuale:
m3: $$(patsubst %,%_,$$([email protected]_DEPS))
Questo è come quello che ho fatto con nascondere l'intera espressione in una variabile, ma risponde più direttamente alla domanda. –
Oh scusa, sì, non ho notato che l'hai fatto. Ho appena visto "questo non sembra possibile" e ho saltato il resto. –