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.inipliku . 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 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 /Dwartości , /I/N, i /S . W Tools.inisystemie 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 aktualizuje MAKEFLAGS; zmiany są dziedziczone podczas rekursji, jeśli MAKEFLAGS jest określony.

  • !ERRORtext

    Wyświetla tekst w błędzie U1050, a następnie zatrzymuje NMAKE, nawet jeśli /I!CMDSWITCHES/K.IGNOREjest używany modyfikator poleceń , lub kreska ().- Spacje lub karty przed zignorowaniem tekstu .

  • !MESSAGEtext

    Wyś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 przez INCLUDE makro, które jest początkowo ustawione na zmienną INCLUDE środowiskową. Przydatne do przekazywania .SUFFIXES ustawień, .PRECIOUSi reguł wnioskowania do cyklicznych plików make.

  • !IFConstant_expression

    Przetwarza instrukcje między !IF i następne !ELSE lub !ENDIF jeśli constant_expression oblicza wartość niezerową.

  • !IFDEFmacro_name

    Instrukcje 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.

  • !IFNDEFmacro_name

    Instrukcje procesów między !IFNDEF i następne !ELSE lub !ENDIF , jeśli macro_name nie są zdefiniowane.

  • !ELSE[ IFconstant_expression macro_nameIFDEF | macro_name ] | IFNDEF

    Przetwarza instrukcje między !ELSE i następne !ENDIF , jeśli poprzednia !IFinstrukcja , !IFDEFlub !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 !IFbloku , !IFDEFlub !IFNDEF . Każdy tekst po !ENDIF tym samym wierszu jest ignorowany.

  • !UNDEFmacro_name

    Niezdefiniuje macro_name.

Wyrażenia w przetwarzaniu wstępnym pliku make

Or !IF!ELSE IFconstant_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 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(path) Tworzy wartość logiczną dla istnienia pliku w ścieżce.
! Jednoargumentowy logiczny NOT.
~ Uzupełnienie jednoargumentowe.
- Negacja jednoargumentowa.
* Mnożenie.
/ Dywizji.
% Modulo (pozostała część).
+ Dodatek.
- Odejmowania.
<< 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ści.
!= Nierówności.
& 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

Zobacz też

NMAKE — dokumentacja