Makefile - Direttive

Sono disponibili numerose direttive in varie forme. Ilmakeprogramma sul tuo sistema potrebbe non supportare tutte le direttive. Quindi per favore controlla se il tuomake supporta le direttive che stiamo spiegando qui. GNU make supporta queste direttive.

Direttive condizionali

Le direttive condizionali sono:

  • Il ifeqdirettiva inizia il condizionale e specifica la condizione. Contiene due argomenti, separati da una virgola e circondati da parentesi. La sostituzione delle variabili viene eseguita su entrambi gli argomenti e quindi vengono confrontati. Le righe del makefile che seguono ifeq sono obbedite se i due argomenti corrispondono; altrimenti vengono ignorati.

  • Il ifneqdirettiva inizia il condizionale e specifica la condizione. Contiene due argomenti, separati da una virgola e circondati da parentesi. La sostituzione delle variabili viene eseguita su entrambi gli argomenti e quindi vengono confrontati. Le righe del makefile che seguono ifneq vengono rispettate se i due argomenti non corrispondono; altrimenti vengono ignorati.

  • Il ifdefdirettiva inizia il condizionale e specifica la condizione. Contiene un singolo argomento. Se l'argomento fornito è vero, la condizione diventa vera.

  • Il ifndefdirettiva inizia il condizionale e specifica la condizione. Contiene un singolo argomento. Se l'argomento fornito è falso, la condizione diventa vera.

  • Il elsedirettiva fa sì che le seguenti righe vengano rispettate se il condizionale precedente non è riuscito. Nell'esempio sopra, ciò significa che il secondo comando di collegamento alternativo viene utilizzato ogni volta che la prima alternativa non viene utilizzata. È facoltativo avere un altro in un condizionale.

  • Il endifla direttiva pone fine al condizionale. Ogni condizionale deve terminare con un endif.

Sintassi delle direttive condizionali

La sintassi di un condizionale semplice senza nient'altro è la seguente:

conditional-directive
   text-if-true
endif

Il text-if-true può essere qualsiasi riga di testo, da considerare come parte del makefile se la condizione è vera. Se la condizione è falsa, non viene utilizzato alcun testo.

La sintassi di un condizionale complesso è la seguente:

conditional-directive
   text-if-true
else
   text-if-false
endif

Se la condizione è vera, viene utilizzato text-if-true; in caso contrario, viene utilizzato text-if-false. Il testo-se-falso può essere un numero qualsiasi di righe di testo.

La sintassi della direttiva condizionale è la stessa sia che il condizionale sia semplice o complesso. Esistono quattro diverse direttive che testano varie condizioni. Sono come dati -

ifeq (arg1, arg2)
ifeq 'arg1' 'arg2'
ifeq "arg1" "arg2"
ifeq "arg1" 'arg2'
ifeq 'arg1' "arg2"

Le direttive opposte alle condizioni di cui sopra sono le seguenti:

ifneq (arg1, arg2)
ifneq 'arg1' 'arg2'
ifneq "arg1" "arg2"
ifneq "arg1" 'arg2'
ifneq 'arg1' "arg2"

Esempio di direttive condizionali

libs_for_gcc = -lgnu
normal_libs =

foo: $(objects)
ifeq ($(CC),gcc)
   $(CC) -o foo $(objects) $(libs_for_gcc)
else
   $(CC) -o foo $(objects) $(normal_libs)
endif

La direttiva include

Il include directive permette makeper sospendere la lettura del makefile corrente e leggere uno o più altri makefile prima di continuare. La direttiva è una riga nel makefile che sembra seguire -

include filenames...

I nomi dei file possono contenere modelli di nomi di file di shell. Gli spazi aggiuntivi sono consentiti e ignorati all'inizio della riga, ma non è consentita una tabulazione. Ad esempio, se hai tre file ".mk", ovvero "a.mk", "b.mk" e "c.mk" e $ (bar), si espande in bish bash, e poi quanto segue espressione.

include foo *.mk $(bar)

is equivalent to:

include foo a.mk b.mk c.mk bish bash

Quando il makeelabora una direttiva include, sospende la lettura del makefile e legge a turno da ogni file elencato. Quando è finito,make riprende a leggere il makefile in cui appare la direttiva.

La direttiva override

Se una variabile è stata impostata con un argomento di comando, le assegnazioni ordinarie nel makefile vengono ignorate. Se vuoi impostare la variabile nel makefile anche se è stata impostata con un argomento di comando, puoi usare una direttiva override, che è una riga che sembra seguire

override variable = value

or

override variable := value