Předběžné zpracování souboru pravidel
Relaci NMAKE můžete řídit pomocí direktiv a výrazů předběžného zpracování. Pokyny k předběžnému zpracování lze umístit do souboru pravidel nebo do Tools.ini
souboru . Pomocí direktiv můžete podmíněně zpracovat soubor pravidel, zobrazit chybové zprávy, zahrnout další soubory pravidel, zrušit definici makra a zapnout nebo vypnout určité možnosti.
Předběžné zpracování direktiv souboru pravidel
Direktivy předběžného zpracování nerozlišují malá a velká písmena. Počáteční vykřičník (!
) musí být uveden na začátku řádku. Za vykřičníkem pro odsazení se může zobrazit nula nebo více mezer nebo tabulátorů.
!CMDSWITCHES
{+
option option-
| } ...Zapne nebo vypne každou uvedenou možnost . Mezery nebo tabulátory musí být zobrazeny před operátorem nebo
-
operátorem+
. Mezi operátorem a písmeny možností se nedají objevit žádné mezery. Písmena se nerozlišují malá a velká písmena a zadává se bez lomítka (/
). Pokud chcete zapnout některé možnosti a vypnout jiné, použijte samostatné specifikace!CMDSWITCHES
.Pouze
/D
,/I
,/N
a/S
lze použít v souboru pravidel. VTools.ini
, všechny možnosti jsou povoleny kromě/F
,/HELP
,/NOLOGO
,/X
, a/?
. Změny zadané v bloku popisu se neprojeví až do dalšího bloku popisu. Tato direktiva aktualizujeMAKEFLAGS
; změny se dědí během rekurze, pokudMAKEFLAGS
je zadána.!ERROR
TextZobrazí text v chybě U1050 a pak zastaví NMAKE, i když
/K
se použije modifikátor příkazu ,/I
,.IGNORE
!CMDSWITCHES
nebo modifikátor příkazu pomlčky (-
). Mezery nebo tabulátory před ignorování textu!MESSAGE
TextZobrazí text do standardního výstupu. Mezery nebo tabulátory před ignorování textu
!INCLUDE
[<
] název souboru [>
]Načte název souboru jako soubor pravidel a pokračuje s aktuálním souborem pravidel. Nástroj NMAKE vyhledá název souboru jako první v zadaném nebo aktuálním adresáři a rekurzivně prostřednictvím adresářů všech nadřazených souborů pravidel. Pokud je název souboru uzavřený do úhlových závorek (
< >
), v adresářích určenýchINCLUDE
makrem, který je původně nastaven naINCLUDE
proměnnou prostředí. Užitečné pro předávání.SUFFIXES
nastavení.PRECIOUS
a odvozování pravidel pro rekurzivní soubory pravidel pravidel.!IF
constant_expressionZpracovává příkazy mezi
!IF
a dalšími!ELSE
nebo!ENDIF
pokud se constant_expression vyhodnotí jako nenulová hodnota.!IFDEF
macro_nameZpracovává příkazy mezi
!IFDEF
a dalšími!ELSE
nebo!ENDIF
pokud je definována macro_name . Makro s hodnotou null se považuje za definované.!IFNDEF
macro_nameZpracovává příkazy mezi
!IFNDEF
a dalšími!ELSE
nebo!ENDIF
pokud není definována macro_name .!ELSE
[IF
constant_expression macro_name | |IFDEF
IFNDEF
macro_name ]Zpracovává příkazy mezi
!ELSE
a dalšími!ENDIF
, pokud se předchozí!IFDEF
!IF
, nebo!IFNDEF
příkaz vyhodnotí na nulu. Volitelná klíčová slova poskytují další kontrolu nad předzpracováním.!ELSEIF
Synonyma pro
!ELSE IF
.!ELSEIFDEF
Synonyma pro
!ELSE IFDEF
.!ELSEIFNDEF
Synonyma pro
!ELSE IFNDEF
.!ENDIF
Označí konec objektu
!IF
,!IFDEF
nebo!IFNDEF
bloku. Veškerý text za!ENDIF
stejným řádkem se ignoruje.!UNDEF
macro_nameNedefinuje macro_name.
Výrazy v předběžném zpracování souboru pravidel
Nebo !IF
!ELSE IF
constant_expression se skládá z celočíselné konstanty (v desítkovém zápisu nebo zápisu jazyka C), řetězcových konstant nebo příkazů. K seskupení výrazů použijte závorky. Výrazy používají aritmetické aritmetické aritmetické čáry ve stylu jazyka C. čísla jsou v rozsahu -2147483648 do 2147483647 ve formě 32bitového dvou doplňku.
Výrazy můžou používat operátory, které fungují na konstantních hodnotách, ukončovací kódy z příkazů, řetězců, maker a cest k systému souborů.
Operátory předběžného zpracování souboru pravidel
Výrazy předběžného zpracování souboru pravidel mohou používat operátory, které fungují na konstantních hodnotách, ukončovací kódy z příkazů, řetězců, maker a cest systému souborů. Pokud chcete výraz vyhodnotit, preprocesor nejprve rozbalí makra a potom spustí příkazy a pak provede operace. Vyhodnocuje operace v pořadí explicitního seskupení v závorkách a potom v pořadí podle priority operátoru. Výsledkem je konstantní hodnota.
Operátor DEFINED
je logický operátor, který funguje s názvem makra. Výraz DEFINED( macro_name )
je pravdivý, pokud je definován macro_name , i když nemá přiřazenou hodnotu. DEFINED
v kombinaci s !IF
nebo !ELSE IF
je ekvivalentní nebo !IFDEF
!ELSE IFDEF
. Na rozdíl od těchto direktiv DEFINED
však lze použít ve složitých výrazech.
Operátor EXIST
je logický operátor, který funguje na cestě systému souborů. EXIST( path )
je true, pokud cesta existuje. Výsledek EXIST
lze použít v binárních výrazech. Pokud cesta obsahuje mezery, uzavřete ji do uvozovek.
K porovnání dvou řetězců použijte operátor rovnosti (==
) nebo operátor nerovnosti (!=
). Uzavřete řetězce do dvojitých uvozovek.
Celočíselné konstanty mohou používat unární operátory pro číselnou negaci (-
), doplněk jednoho (~
) a logickou negaci (!
).
Výrazy můžou používat následující operátory. Operátory se stejnou prioritou jsou seskupené a skupiny jsou uvedeny v sestupném pořadí priorit. Unární operátory přidružují operand napravo. Binární operátory se stejnými prioritami přidružují operandy zleva doprava.
Operátor | Popis |
---|---|
DEFINED( macro_name ) |
Vytvoří logickou hodnotu pro aktuální stav definice macro_name. |
EXIST( cesta ) |
Vytvoří logickou hodnotu pro existenci souboru v cestě. |
! |
Unární logická NE. |
~ |
Unární doplněk. |
- |
Unární negace. |
* |
Násobení. |
/ |
Dělení. |
% |
Moduls (zbytek). |
+ |
Sčítání. |
- |
Odčítání. |
<< |
Bitový posun doleva. |
>> |
Bitový posun doprava. |
<= |
Menší než nebo rovno. |
>= |
Větší než nebo rovno. |
< |
Méně než. |
> |
Větší než. |
== |
Rovnost. |
!= |
Nerovnost. |
& |
Bitový operátor AND. |
^ |
Bitový XOR. |
| |
Bitový operátor OR. |
&& |
Logický operátor AND. |
|| |
Logický operátor OR. |
Poznámka:
Bitový operátor XOR (^
) je stejný jako řídicí znak a musí být uchycený (jako ^^
) při použití ve výrazu.
Spuštění programu při předběžném zpracování
Pokud chcete při předběžném zpracování použít ukončovací kód příkazu, zadejte příkaz s libovolnými argumenty v hranatých závorkách ([ ]
). Před spuštěním příkazu se rozbalí všechna makra. NMAKE nahradí specifikaci příkazu ukončovacím kódem příkazu, který lze použít ve výrazu k řízení předběžného zpracování.
Příklad
!IF [my_command.exe arg1 arg2] != 0
!MESSAGE my_command.exe failed!
!ENDIF