Przetwarzanie wstępne pliku reguł programu make
Sesję NMAKE można kontrolować przy użyciu dyrektyw i wyrażeń przetwarzania wstępnego. Instrukcje przetwarzania wstępnego można umieścić w pliku make lub w Tools.ini
pliku . Za pomocą dyrektyw można warunkowo przetwarzać plik make, wyświetlać komunikaty o błędach, dołączać inne pliki makefile, niezdefiniować makro i włączać lub wyłączać niektóre opcje.
Dyrektywy przetwarzania wstępnego pliku reguł programu Make
Dyrektywy przetwarzania wstępnego nie są uwzględniane wielkości liter. Początkowy wykrzyknik (!
) musi pojawić się na początku wiersza. Zero lub więcej spacji lub kart może pojawić się po wykrzykniku w celu wcięcia.
!CMDSWITCHES
{+
opcja opcji-
| } ...Włącza lub wyłącza każdą z wymienionych opcji . Spacje lub karty muszą pojawić się przed operatorem
+
or-
. Nie można wyświetlić spacji między operatorem a literami opcji. Litery nie są uwzględniane w wielkości liter i są określane bez ukośnika (/
). Aby włączyć niektóre opcje i wyłączyć inne, użyj oddzielnych specyfikacji programu!CMDSWITCHES
.W pliku make można używać tylko
/D
wartości ,/I
/N
, i/S
. WTools.ini
systemie wszystkie opcje są dozwolone z wyjątkiem/F
, ,/HELP
,/NOLOGO
/X
, i/?
. Zmiany określone w bloku opisu nie zostaną zastosowane do następnego bloku opisu. Ta dyrektywa aktualizujeMAKEFLAGS
; zmiany są dziedziczone podczas rekursji, jeśliMAKEFLAGS
jest określony.!ERROR
TekstWyświetla tekst w błędzie U1050, a następnie zatrzymuje NMAKE, nawet jeśli
/I
!CMDSWITCHES
/K
.IGNORE
jest używany modyfikator poleceń , lub kreska ().-
Spacje lub karty przed zignorowaniem tekstu .!MESSAGE
TekstWyświetla tekst do standardowych danych wyjściowych. Spacje lub karty przed zignorowaniem tekstu .
!INCLUDE
[<
] nazwa pliku [>
]Odczytuje nazwę pliku jako plik make, a następnie kontynuuje działanie z bieżącym plikiem makefile. NMAKE wyszukuje nazwę pliku najpierw w określonym lub bieżącym katalogu, a następnie rekursywnie za pomocą katalogów dowolnego nadrzędnego pliku makefile, a następnie, jeśli nazwa pliku jest ujęta w nawiasy kątowe (
< >
), w katalogach określonych przezINCLUDE
makro, które jest początkowo ustawione na zmiennąINCLUDE
środowiskową. Przydatne do przekazywania.SUFFIXES
ustawień,.PRECIOUS
i reguł wnioskowania do cyklicznych plików make.!IF
constant_expressionPrzetwarza instrukcje między
!IF
i następne!ELSE
lub!ENDIF
jeśli constant_expression oblicza wartość niezerową.!IFDEF
macro_nameInstrukcje procesów między
!IFDEF
i następne!ELSE
lub!ENDIF
, jeśli macro_name jest zdefiniowany. Makro o wartości null jest uważane za zdefiniowane.!IFNDEF
macro_nameInstrukcje procesów między
!IFNDEF
i następne!ELSE
lub!ENDIF
, jeśli macro_name nie są zdefiniowane.!ELSE
[IF
constant_expression macro_nameIFDEF
| macro_name ] |IFNDEF
Przetwarza instrukcje między
!ELSE
i następne!ENDIF
, jeśli poprzednia!IF
instrukcja ,!IFDEF
lub!IFNDEF
obliczona na zero. Opcjonalne słowa kluczowe zapewniają dalszą kontrolę nad przetwarzaniem wstępnym.!ELSEIF
Synonimu dla
!ELSE IF
.!ELSEIFDEF
Synonimu dla
!ELSE IFDEF
.!ELSEIFNDEF
Synonimu dla
!ELSE IFNDEF
.!ENDIF
Oznacza koniec
!IF
bloku ,!IFDEF
lub!IFNDEF
. Każdy tekst po!ENDIF
tym samym wierszu jest ignorowany.!UNDEF
macro_nameNiezdefiniuje macro_name.
Wyrażenia w przetwarzaniu wstępnym pliku reguł programu make
!ELSE IF
Or !IF
constant_expression składa się z stałych całkowitych (w notacji dziesiętnej lub C-language), stałych ciągów lub poleceń. Użyj nawiasów do grupowania wyrażeń. Wyrażenia używają arytmetyki długiej liczby całkowitej ze znakiem w stylu C; liczby znajdują się w 32-bitowej formie dwuczęściowej w zakresie -2147483648 do 2147483647.
Wyrażenia mogą używać operatorów, które działają na wartościach stałych, kodów zakończenia z poleceń, ciągów, makr i ścieżek systemu plików.
Operatory przetwarzania wstępnego pliku reguł programu make
Wyrażenia przetwarzania wstępnego pliku make mogą używać operatorów działających na wartościach stałych, kodów zakończenia poleceń, ciągów, makr i ścieżek systemu plików. Aby ocenić wyrażenie, preprocesor najpierw rozszerza makra, a następnie wykonuje polecenia, a następnie wykonuje operacje. Ocenia operacje w kolejności jawnego grupowania w nawiasach, a następnie w kolejności pierwszeństwa operatora. Wynik jest stałą wartością.
Operator DEFINED
jest operatorem logicznym, który działa na nazwie makra. Wyrażenie DEFINED( macro_name )
ma wartość true, jeśli macro_name jest zdefiniowana, nawet jeśli nie ma przypisanej wartości. DEFINED
w połączeniu z !IF
lub !ELSE IF
jest równoważne !IFDEF
lub lub !ELSE IFDEF
. Jednak w przeciwieństwie do tych dyrektyw DEFINED
można używać w wyrażeniach złożonych.
Operator EXIST
jest operatorem logicznym, który działa na ścieżce systemu plików. EXIST( path )
wartość ma wartość true, jeśli istnieje ścieżka . Wynik z EXIST
można użyć w wyrażeniach binarnych. Jeśli ścieżka zawiera spacje, należy ująć ją w znaki podwójnego cudzysłowu.
Aby porównać dwa ciągi, użyj operatora równości (==
) lub operatora nierówności (!=
). Ująć ciągi w podwójny cudzysłów.
Stałe całkowite mogą używać operatorów jednoargumentowych dla negacji liczbowej (), uzupełnienia (-
~
) i negacji logicznej (!
).
Wyrażenia mogą używać następujących operatorów. Operatory o równym pierwszeństwie są grupowane razem, a grupy są wymienione w malejącej kolejności pierwszeństwa. Operatory jednoargumentowe kojarzą się z operandem po prawej stronie. Operatory binarne o równym pierwszeństwie kojarzą operandy od lewej do prawej.
Operator | opis |
---|---|
DEFINED( macro_name ) |
Tworzy wartość logiczną dla bieżącego stanu definicji macro_name. |
EXIST( ścieżka ) |
Tworzy wartość logiczną dla istnienia pliku w ścieżce. |
! |
Jednoargumentowy logiczny NOT. |
~ |
Uzupełnienie jednoargumentowe. |
- |
Negacja jednoargumentowa. |
* |
Mnożenie. |
/ |
Dzielenie. |
% |
Modulo (pozostała część). |
+ |
Dodatek. |
- |
Odejmowanie. |
<< |
Przesunięcie bitowe w lewo. |
>> |
Przesunięcie bitowe w prawo. |
<= |
Mniejsze niż lub równe. |
>= |
Większe niż lub równe. |
< |
Mniej niż. |
> |
Większe niż. |
== |
Równość. |
!= |
Nierówność. |
& |
Bitowe I. |
^ |
Bitowy XOR. |
| |
Bitowe OR. |
&& |
Logiczne AND. |
|| |
Logiczne OR. |
Uwaga
Bitowy operator XOR (^
) jest taki sam jak znak ucieczki i musi zostać uniknięty (co ^^
) w przypadku użycia w wyrażeniu.
Wykonywanie programu w przetwarzaniu wstępnym
Aby użyć kodu zakończenia polecenia podczas przetwarzania wstępnego, określ polecenie z dowolnymi argumentami w nawiasach kwadratowych ([ ]
). Przed wykonaniem polecenia wszystkie makra zostaną rozwinięte. NMAKE zastępuje specyfikację polecenia kodem zakończenia polecenia, który może służyć w wyrażeniu do kontrolowania przetwarzania wstępnego.
Przykład
!IF [my_command.exe arg1 arg2] != 0
!MESSAGE my_command.exe failed!
!ENDIF