Pre-elaborazione di makefile

È possibile controllare la sessione NMAKE usando le direttive e le espressioni di pre-elaborazione. Le istruzioni di pre-elaborazione possono essere inserite nel makefile o in Tools.ini. Usando le direttive, è possibile elaborare in modo condizionale il makefile, visualizzare i messaggi di errore, includere altri makefile, annullare la definizione di una macro e attivare o disattivare determinate opzioni.

Direttive di pre-elaborazione makefile

Le direttive di pre-elaborazione non fanno distinzione tra maiuscole e minuscole. Il punto esclamativo iniziale (!) deve essere visualizzato all'inizio della riga. Zero o più spazi o tabulazioni possono essere visualizzati dopo il punto esclamativo, per il rientro.

  • !CMDSWITCHES{ +opzione | -} ...

    Attiva o disattiva ogni opzione elencata. Gli spazi o le schede devono essere visualizzati prima dell'operatore + o - . Non possono essere visualizzati spazi tra l'operatore e le lettere di opzione. Le lettere non fanno distinzione tra maiuscole e minuscole e vengono specificate senza una barra (/). Per attivare alcune opzioni e disattivarne altre, usare specifiche separate di !CMDSWITCHES.

    Solo /D, /I, /Ne /S possono essere usati in un makefile. In Tools.initutte le opzioni sono consentite tranne /F, /HELP, /NOLOGO, /Xe /?. Le modifiche specificate in un blocco di descrizione non diventano effettive fino al blocco di descrizione successivo. Questa direttiva aggiorna MAKEFLAGS; le modifiche vengono ereditate durante la ricorsione, se MAKEFLAGS specificato.

  • !ERRORtext

    Visualizza il testo nell'errore U1050, quindi interrompe NMAKE, anche se /I!CMDSWITCHES/K.IGNOREviene usato , o il modificatore di comando trattino ().- Spazi o tabulazioni prima che il testo venga ignorato.

  • !MESSAGEtext

    Visualizza il testo nell'output standard. Spazi o tabulazioni prima che il testo venga ignorato.

  • !INCLUDE [ < ] filename [ > ]

    Legge il nome file come makefile, quindi continua con il makefile corrente. NMAKE cerca prima il nome file nella directory specificata o corrente, quindi in modo ricorsivo tramite le directory di qualsiasi makefile padre, quindi, se filename è racchiuso tra parentesi angolari (< >), nelle directory specificate dalla INCLUDE macro, che inizialmente viene impostata sulla INCLUDE variabile di ambiente. Utile per passare .SUFFIXES le impostazioni, .PRECIOUSe le regole di inferenza ai makefile ricorsivi.

  • !IFconstant_expression

    Elabora le istruzioni tra !IF e il successivo !ELSE o !ENDIF se constant_expression restituisce un valore diverso da zero.

  • !IFDEFmacro_name

    Elabora le istruzioni tra !IFDEF e il successivo !ELSE o !ENDIF se è definito macro_name . Una macro Null viene considerata definita.

  • !IFNDEFmacro_name

    Elabora le istruzioni tra !IFNDEF e il successivo !ELSE o !ENDIF se macro_name non è definito.

  • !ELSE[ IFconstant_expression macro_nameIFDEF | macro_name ] | IFNDEF

    Elabora le istruzioni tra !ELSE e la successiva !ENDIF se l'istruzione , !IFDEFo !IFNDEF precedente !IFha valutato zero. Le parole chiave facoltative consentono di controllare ulteriormente la pre-elaborazione.

  • !ELSEIF

    Sinonimo di !ELSE IF.

  • !ELSEIFDEF

    Sinonimo di !ELSE IFDEF.

  • !ELSEIFNDEF

    Sinonimo di !ELSE IFNDEF.

  • !ENDIF

    Contrassegna la fine di un !IFblocco , !IFDEFo !IFNDEF . Qualsiasi testo dopo !ENDIF nella stessa riga viene ignorato.

  • !UNDEFmacro_name

    Macro_name non definito.

Espressioni nella pre-elaborazione del makefile

L'oggetto !IF o !ELSE IFconstant_expression è costituito da costanti integer (in notazione decimale o in linguaggio C), costanti stringa o comandi. Usare le parentesi per raggruppare le espressioni. Le espressioni usano l'aritmetica aritmetica con segno con segno C; i numeri sono in forma di complemento a 32 bit nell'intervallo -2147483648 da 2147483647.

Le espressioni possono usare operatori che agiscono su valori costanti, codici di uscita da comandi, stringhe, macro e percorsi del file system.

Operatori di pre-elaborazione makefile

Nelle espressioni della pre-elaborazione di makefile è possibile usare operatori che agiscono sui valori delle costanti, sui codici di uscita dei comandi, su stringhe, macro e percorsi del file system. Per valutare l'espressione, il preprocessore espande prima le macro e quindi esegue i comandi e quindi esegue le operazioni. Valuta le operazioni in ordine di raggruppamento esplicito tra parentesi e quindi in ordine di precedenza dell'operatore. Il risultato è un valore costante.

L'operatore DEFINED è un operatore logico che agisce sul nome di una macro. L'espressione DEFINED( macro_name ) è true se viene definita macro_name , anche se non ha un valore assegnato. DEFINED in combinazione con !IF o !ELSE IF è equivalente a !IFDEF o !ELSE IFDEF. Tuttavia, a differenza di queste direttive, DEFINED può essere usato in espressioni complesse.

L'operatore EXIST è un operatore logico che agisce su un percorso del file system. EXIST( path ) è true se il percorso esiste. Il risultato da EXIST può essere usato nelle espressioni binarie. Se il percorso contiene spazi, racchiuderlo tra virgolette doppie.

Per confrontare due stringhe, usare l'operatore di uguaglianza (==) o l'operatore di disuguaglianza (!=). Racchiudere le stringhe tra virgolette doppie.

Le costanti integer possono usare gli operatori unari per la negazione numerica (-), il complemento (~) e la negazione logica (!).

Le espressioni possono usare gli operatori seguenti. Gli operatori con uguale precedenza vengono raggruppati e i gruppi vengono elencati in ordine di precedenza decrescente. Gli operatori unari si associano all'operando a destra. Gli operatori binari con uguale precedenza uguale si associano agli operandi da sinistra a destra.

Operatore Descrizione
DEFINED(macro_name) Produce un valore logico per lo stato di definizione corrente di macro_name.
EXIST(path) Produce un valore logico per l'esistenza di un file nel percorso.
! NOT logico unario.
~ Complemento unario.
- Negazione unaria.
* Moltiplicazione.
/ Divisione.
% Modulo (resto).
+ Addizione.
- Sottrazione.
<< Spostamento a sinistra bit per bit.
>> Spostamento a destra bit per bit.
<= Minore o uguale a.
>= Maggiore o uguale a.
< Minore di.
> Maggiore di.
== Uguaglianza.
!= Disuguaglianza.
& AND bit per bit.
^ XOR bit per bit.
| OR bit per bit.
&& AND logico.
|| OR logico.

Nota

L'operatore XOR bit per bit (^) è uguale al carattere di escape e deve essere preceduto da un carattere di escape (come ^^) quando viene usato in un'espressione.

Esecuzione di un programma nella pre-elaborazione

Per usare il codice di uscita di un comando durante la pre-elaborazione, specificare il comando, con qualsiasi argomento, tra parentesi quadre ([ ]). Tutte le macro vengono espanse prima dell'esecuzione del comando. NMAKE sostituisce la specifica del comando con il codice di uscita del comando, che può essere usato in un'espressione per controllare la pre-elaborazione.

Esempio

!IF [my_command.exe arg1 arg2] != 0
!MESSAGE my_command.exe failed!
!ENDIF

Vedi anche

Riferimenti a NMAKE