Alcuni giorni fa ho postato una risposta nello stack overflow su come scrivere un make gerarchico (http://stackoverflow.com/questions/1498213/make-hierarchical-make-file). La risposta è stata cancellata, quindi presumo che sia stato completamente sbagliato o fuori tema (o entrambi).Come scrivere un Makefile gerarchico semplice?
Mi piacerebbe sapere come scrivere Makefile gerarchico. Questo è un Makefile che chiama diversi Makefile nelle sottodirectory. Presumo una struttura di directory simile:
- project
|--module1
|--Makefile
|--...
|--module2
|--Makefile
|--module2.1
|--module2.2
|--...
|--module3
|--Makefile
|--...
|--etc
Suppongo inoltre che i membri del progetto hanno concordato solo solo su un insieme minimo di obiettivi makefile come: (di default), pulito, installare, e così. Così, i seguenti comandi tra cui fanno bandiere saranno propagare ai moduli:
cd project
make clean
make -k
make install
#etc
Cosa c'è di sbagliato con il seguente Makefile di progetto:
PACKAGES = \
module1 \
module2 \
emodule3
VIRTUAL_PACKAGES = $(addsuffix /.virtual.Makefile,${PACKAGES})
TARGETS=clean install all
.PHONY: $(TARGETS)
default: all
FLAGS = $(ifeq $(MAKEFLAGS) "","",-$(MAKEFLAGS))
$(TARGETS): $(VIRTUAL_PACKAGES)
$(VIRTUAL_PACKAGES):
$(MAKE) $(FLAGS) -C $(@D) $(MAKECMDGOALS)
sì, il $ VIRTUAL_PACKAGES nel Makefile sembra strano. L'alternativa di mescolare un ciclo for è un po 'più breve, ma non sono sicuro se è meglio (come ho bisogno di fare affidamento su bash): PACCHETTI = \ module1 \ module2 \ emodule3
TARGETS=clean install all
.PHONY: $(TARGETS)
default: all
FLAGS = $(ifeq $(MAKEFLAGS) "","",-$(MAKEFLAGS))
$(TARGETS):
for p in $(PACKAGES) ; do $(MAKE) $(FLAGS) -C $$p [email protected] || break; done
Grazie !
Ritiene che l'assegnazione a 'lavoro FLAGS'? Quale versione di Make stai usando? – Beta
Una soluzione non ricorsiva: http://stackoverflow.com/a/7321954/412080 –
Può o potrebbe non esserti utile, ma per la gestione di progetti complessi trovo molto più semplice. È davvero facile avere una gerarchia di CMakeLists.txt. I makefile verranno generati automaticamente. – Hindol