Makefile - Altre caratteristiche
In questo capitolo, esamineremo varie altre caratteristiche di Makefile.
Uso ricorsivo di Make
Uso ricorsivo di make significa usare makecome comando in un makefile. Questa tecnica è utile quando si vogliono makefile separati per vari sottosistemi che compongono un sistema più grande. Per esempio, supponi di avere una sottodirectory chiamata `subdir 'che ha il suo makefile, e desideri che il makefile della directory contenitore venga eseguitomakenella sottodirectory. Puoi farlo scrivendo il codice sottostante -
subsystem:
cd subdir && $(MAKE)
or, equivalently:
subsystem:
$(MAKE) -C subdir
Puoi scrivere ricorsivo makecomandi semplicemente copiando questo esempio. Tuttavia, è necessario sapere come funzionano e perché, e in che modo la marca secondaria si collega alla marca di primo livello.
Comunicazione di variabili a un sub-make
Valori variabili del primo livello makepuò essere passato al sub-make attraverso l'ambiente su esplicita richiesta. Queste variabili sono definite nella sub-marca come valori predefiniti. Non è possibile sovrascrivere ciò che è specificato nel makefile usato dal sub-make makefile a meno che non si usi l'opzione `-e '.
Per trasmettere o esportare una variabile, makeaggiunge la variabile e il suo valore all'ambiente per l'esecuzione di ogni comando. Il sub-make, a sua volta, utilizza l'ambiente per inizializzare la sua tabella di valori variabili.
Le variabili speciali SHELL e MAKEFLAGS vengono sempre esportate (a meno che non vengano annullate). MAKEFILES viene esportato se lo imposti su qualcosa.
Se vuoi esportare variabili specifiche in un sub-make, usa la direttiva export, come mostrato di seguito -
export variable ...
Se vuoi impedire che una variabile venga esportata, usa la direttiva unexport, come mostrato di seguito -
unexport variable ...
La variabile MAKEFILES
Se la variabile d'ambiente MAKEFILES è definita, makeconsidera il suo valore come un elenco di nomi (separati da spazi bianchi) di makefile aggiuntivi da leggere prima degli altri. Funziona in modo molto simile alla direttiva include: i file vengono ricercati in varie directory.
L'utilizzo principale di MAKEFILES è nella comunicazione tra invocazioni ricorsive di make.
Incluso file di intestazione da directory diverse
Se hai messo i file di intestazione in directory diverse e stai eseguendo makein una directory diversa, quindi è necessario fornire il percorso dei file di intestazione. Questo può essere fatto usando l'opzione -I nel makefile. Supponendo che il file functions.h sia disponibile nella cartella / home / tutorialspoint / header e il resto dei file sia disponibile nella cartella / home / tutorialspoint / src /, il makefile verrebbe scritto come segue:
INCLUDES = -I "/home/tutorialspoint/header"
CC = gcc
LIBS = -lm
CFLAGS = -g -Wall
OBJ = main.o factorial.o hello.o
hello: ${OBJ}
${CC} ${CFLAGS} ${INCLUDES} -o $@ ${OBJS} ${LIBS}
.cpp.o:
${CC} ${CFLAGS} ${INCLUDES} -c $<
Aggiunta di più testo alle variabili
Spesso è utile aggiungere più testo al valore di una variabile già definita. Lo fai con una riga contenente "+ =", come mostrato -
objects += another.o
Prende il valore degli oggetti variabili e aggiunge il testo "another.o", preceduto da un singolo spazio come mostrato di seguito.
objects = main.o hello.o factorial.o
objects += another.o
Il codice precedente imposta gli oggetti su `main.o hello.o factorial.o another.o '.
L'uso di "+ =" è simile a:
objects = main.o hello.o factorial.o
objects := $(objects) another.o
Riga di continuazione nel Makefile
Se non ti piacciono le linee troppo grandi nel tuo Makefile, puoi spezzare la linea usando una barra rovesciata "\" come mostrato di seguito -
OBJ = main.o factorial.o \
hello.o
is equivalent to
OBJ = main.o factorial.o hello.o
Esecuzione di Makefile dal prompt dei comandi
Se hai preparato il Makefile con il nome "Makefile", scrivi semplicemente make al prompt dei comandi e verrà eseguito il file Makefile. Ma se hai dato un altro nome al Makefile, usa il seguente comando:
make -f your-makefile-name