Come posso usare $(MAKEFLAGS)
(o un altro modo di passare le variabili definite sulla riga di comando per eseguire sub-make) in un modo che supporta invocazione dalla shell con entrambi make VAR=val
e make -args
?
Ho bisogno dei miei sottoprogetti configurabili, ma odio gli autotools, quindi sto usando make variables per questo, ad es. invocando da shell:
$ make USE_SSE3=1
e USE_SSE3
necessità di applicare a tutti costruisce in tutte le sub-makefiles.
The manual afferma che:
se ‘fai -KS’ quindi MAKEFLAGS ottiene il valore ‘ks’.
Pertanto sto usando -$(MAKEFLAGS)
(con un prefisso di trattino) nel mio Makefile.
Tuttavia, questo si espande in argomenti non validi quando vengono utilizzate variabili senza flag. Se corro:
$ make FOO=bar
poi sub-make ottiene valida -FOO=bar
. OTOH senza le definizioni delle variabili del prefisso del trattino funzionano, quindi non lo sono make -s
, ecc.
Esiste una sintassi/variabile/hack che rende il passaggio di argomenti e definizioni di variabili solitarie che funzionano con i sotto-makefile?
Il file legacy $(MKFLAGS)
non ha il problema del prefisso del trattino strano, ma non include neanche le definizioni di variabili. Ho provato a correggere la variabile con $(patsubst)
, ma ciò ha solo peggiorato le cose eliminando gli spazi bianchi.
Ho bisogno che la soluzione sia compatibile con il vecchio GNU Make 3.81 fornito con Mac OS X Mavericks.
foo:
$(MAKE) -C subproject -$(MAKEFLAGS)
$ make foo -s # MAKEFLAGS = 's'
$ make foo BAR=baz # MAKEFLAGS = 'BAR=baz'
$ make foo -j8 # MAKEFLAGS = ' --job-server=…'
Questo sembra funzionare senza alcuno sforzo particolare. Prova 'pippo: $ (MAKE) bar' e' bar: echo flags sono $ (MAKEFLAGS), BAR is $ (BAR) '. – Beta