Sto provando a incollare due sistemi di generazione. Entrambi sono ricorsivi (le regole nel makefile usano make per chiamare altri makefile per costruire componenti del progetto).Come posso ignorare l'assegnazione della variabile della riga di comando in una build ricorsiva?
Li chiamerò "A" e "B" dove "A" crea l'applicazione e "B" crea librerie utilizzate da "A".
Il makefile di livello superiore in A chiama 'make TARGET = qualunque' che significa che tutti i bit della build creati in modo ricorsivo ereditano il valore di TARGET come variabile di sola lettura, incluso il sistema di compilazione da B, che è chiamato come parte della build ricorsiva.
Non voglio che ciò accada nel sistema di compilazione per "B" (che proviene da un progetto diverso) poiché i file di make lì utilizzano TARGET per i propri scopi e la compilazione fallisce poiché TARGET ha il valore sbagliato ed è sola lettura.
Posso solo vedere due soluzioni a questo, nessuno dei quali è palatable;
1) Rinominare TARGET in qualcos'altro nel makefile in A che lo imposta e nei makefile in A che lo utilizzano, per evitare lo scontro con i livelli inferiori del sistema di generazione.
2) Utilizzare la direttiva 'override' ovunque nei makefile in B in cui è impostata la variabile TARGET per sovrascrivere lo stato di sola lettura.
Qualcuno ha qualche idea migliore? - idealmente, voglio nulla per essere ereditata dal sistema di compilazione della B da A di, ad eccezione di quelle opzioni passo esplicitamente al sistema B costruire da A.
Per inciso, sto usando GNU Make v3.80.
Se non vuoi impostare TARGET nel makefile di B, perché stai passando TARGET = qualunque cosa nel makefile di A? – JesperE
Il makefile di livello superiore passa TARGET = qualunque cosa a un makefile di secondo livello in A (che ne ha bisogno) e il makefile di secondo livello in A quindi chiama il makefile di B, che eredita TARGET come variabile di sola lettura dall'ambiente del marca di secondo livello. –