Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Pravidla odvozování v NMAKE poskytují příkazy pro aktualizaci cílů a odvození závislých položek pro cíle. Rozšíření v pravidle odvození odpovídají jednomu cíli a závislému, který má stejný základní název. Pravidla odvozování jsou uživatelsky definovaná nebo předdefinovaná; předdefinovaná pravidla lze předdefinovat.
Pokud zadaná závislost nemá žádné příkazy a pokud .SUFFIXES obsahuje rozšíření závislého objektu, nástroj NMAKE použije pravidlo, jehož rozšíření odpovídají cíli a existujícímu souboru v aktuálním nebo zadaném adresáři. Pokud více než jedno pravidlo odpovídá existujícím souborům, určuje seznam, .SUFFIXES který se má použít. Priorita seznamu sestupně zleva doprava. Pokud závislý soubor neexistuje a není uvedený jako cíl v jiném bloku popisu, pravidlo odvození může vytvořit chybějící závislost z jiného souboru, který má stejný základní název. Pokud cíl bloku popisu neobsahuje žádné závislé prvky nebo příkazy, pravidlo odvozování může cíl aktualizovat. Pravidla odvození můžou vytvořit cíl příkazového řádku i v případě, že neexistuje žádný blok popisu. Nástroj NMAKE může vyvolat pravidlo pro odvozenou závislost, i když je zadán explicitní závislý objekt.
Definice pravidla
From_ext představuje příponu závislého souboru a to_ext představuje příponu cílového souboru.
.from_ext.to_ext:
commands
U rozšíření se nerozlišuje malá a velká písmena. Makra lze vyvolat, aby představovala from_ext a to_ext; makra se během předběžného zpracování rozbalí. Tečka (.), která předchází from_ext musí být uvedena na začátku řádku. Dvojtečka (:) předchází nula nebo více mezer nebo tabulátoru. Za ním můžou následovat jenom mezery nebo tabulátory, středník (;) k zadání příkazu, znak čísla (#) k zadání komentáře nebo znaku nového řádku. Nejsou povoleny žádné další mezery. Příkazy se zadají jako v blocích popisu.
Cesty hledání v pravidlech
{from_path}.from_ext{to_path}.to_ext:
commands
Pravidlo odvození se vztahuje na závislost pouze v případě, že cesty zadané v závislosti přesně odpovídají cestám odvození-pravidlo. Zadejte v from_path závislý adresář a adresář cíle v to_path; nejsou povoleny žádné mezery. Zadejte pouze jednu cestu pro každé rozšíření. Cesta v jednom rozšíření vyžaduje cestu na druhé. Pokud chcete zadat aktuální adresář, použijte tečku (.) nebo prázdné složené závorky ({ }). Makra mohou představovat from_path a to_path; jsou vyvolána během předběžného zpracování.
Příklad cest hledání
{dbi\}.cpp{$(ODIR)}.obj::
$(CC) $(CFLAGS) $(YUDBI) $<
{ilstore\}.cpp{$(ODIR)}.obj::
$(CC) $(CFLAGS) $<
{misc\}.cpp{$(ODIR)}.obj::
$(CC) $(CFLAGS) $(YUPDB) $<
{misc\}.c{$(ODIR)}.obj::
$(CC) $(CFLAGS) $<
{msf\}.cpp{$(ODIR)}.obj::
$(CC) $(CFLAGS) $<
{bsc\}.cpp{$(ODIR)}.obj::
$(CC) $(CFLAGS) $(YUPDB) $<
{mre\}.cpp{$(ODIR)}.obj::
$(CC) $(CFLAGS) $(YUPDB) $<
{namesrvr\}.cpp{$(ODIR)}.obj::
$(CC) $(CFLAGS) $(YUPDB) $<
{src\cvr\}.cpp{$(ODIR)}.obj::
$(CC) $(CFLAGS) $<
Pravidla dávkového režimu
{from_path}.from_ext{to_path}.to_ext::
commands
Pravidla odvozování v dávkovém režimu poskytují pouze jedno vyvolání pravidla odvozování, když příkazy N procházejí tímto pravidlem odvozování. Bez pravidel odvozování v dávkovém režimu by bylo nutné vyvolat příkazy N. N je počet závislých položek, které aktivují pravidlo odvozování.
Jediný syntaktický rozdíl od standardního pravidla odvozování spočívá v tom, že pravidlo odvozování v dávkovém režimu končí dvojitou dvojtečku (::).
Poznámka:
Vyvolaný nástroj musí být schopen zpracovat více souborů. Pravidlo odvozování v dávkovém režimu musí být používáno $< jako makro pro přístup k závislým souborům.
Pravidla odvozování v dávkovém režimu můžou urychlit proces sestavení. V dávkovém režimu je rychlejší dodávat soubory kompilátoru, protože ovladač kompilátoru se vyvolá pouze jednou. Například kompilátor C a C++ běží rychleji při zpracování sady souborů, protože během celého procesu může zůstat v paměti.
Následující příklad ukazuje, jak používat pravidla odvozování dávkového režimu:
#
# sample makefile to illustrate batch-mode inference rules
#
O = .
S = .
Objs = $O/foo1.obj $O/foo2.obj $O/foo2.obj $O/foo3.obj $O/foo4.obj
CFLAGS = -nologo
all : $(Objs)
!ifdef NOBatch
{$S}.cpp{$O}.obj:
!else
{$S}.cpp{$O}.obj::
!endif
$(CC) $(CFLAGS) -Fd$O\ -c $<
$(Objs) :
#end of makefile
Nástroj NMAKE vytvoří následující výstup bez pravidel odvozování v režimu batch:
E:\tmp> nmake -f test.mak -a NOBatch=1
Microsoft (R) Program Maintenance Utility Version 7.00.0000
Copyright (C) Microsoft Corp 1988-2001. All rights reserved.
cl -nologo -Fd.\ -c .\foo1.cpp
foo1.cpp
cl -nologo -Fd.\ -c .\foo2.cpp
foo2.cpp
cl -nologo -Fd.\ -c .\foo3.cpp
foo3.cpp
cl -nologo -Fd.\ -c .\foo4.cpp
foo4.cpp
Nástroj NMAKE vytvoří následující výsledek s pravidly odvozování v dávkovém režimu:
E:\tmp> nmake -f test.mak -a
Microsoft (R) Program Maintenance Utility Version 7.00.0000
Copyright (C) Microsoft Corp 1988-2001. All rights reserved.
cl -nologo -Fd.\ -c .\foo1.cpp .\foo2.cpp .\foo3.cpp .\foo4.cpp
foo1.cpp
foo2.cpp
foo3.cpp
foo4.cpp
Generating Code...
Předdefinovaná pravidla
Předdefinovaná pravidla odvození používají makra příkazů a možností zadaných pomocí nástroje NMAKE.
| Pravidlo | Příkaz | Výchozí akce | Pravidlo dávky | Platforma |
|---|---|---|---|---|
.asm.exe |
$(AS) $(AFLAGS) $< |
ml $< |
ne | x86 |
.asm.obj |
$(AS) $(AFLAGS) /c $< |
ml /c $< |
ano | x86 |
.asm.exe |
$(AS) $(AFLAGS) $< |
ml64 $< |
ne | x64 |
.asm.obj |
$(AS) $(AFLAGS) /c $< |
ml64 /c $< |
ano | x64 |
.c.exe |
$(CC) $(CFLAGS) $< |
cl $< |
ne | vše |
.c.obj |
$(CC) $(CFLAGS) /c $< |
cl /c $< |
ano | vše |
.cc.exe |
$(CC) $(CFLAGS) $< |
cl $< |
ne | vše |
.cc.obj |
$(CC) $(CFLAGS) /c $< |
cl /c $< |
ano | vše |
.cpp.exe |
$(CPP) $(CPPFLAGS) $< |
cl $< |
ne | vše |
.cpp.obj |
$(CPP) $(CPPFLAGS) /c $< |
cl /c $< |
ano | vše |
.cxx.exe |
$(CXX) $(CXXFLAGS) $< |
cl $< |
ne | vše |
.cxx.obj |
$(CXX) $(CXXFLAGS) /c $< |
cl /c $< |
ano | vše |
.rc.res |
$(RC) $(RFLAGS) /r $< |
rc /r $< |
ne | vše |
Odvozené závislé objekty a pravidla
Nástroj NMAKE předpokládá odvozenou závislost pro cíl, pokud existuje příslušné pravidlo odvozování. Pravidlo platí, pokud:
to_ext odpovídá rozšíření cíle.
from_ext odpovídá příponě souboru, který má základní název cíle a který existuje v aktuálním nebo zadaném adresáři.
from_ext je v
.SUFFIXES; žádné jiné from_ext v odpovídajícím pravidle nemá vyšší.SUFFIXESprioritu.Žádná explicitní závislost nemá vyšší
.SUFFIXESprioritu.
Odvozené závislé osoby mohou způsobit neočekávané vedlejší účinky. Pokud blok popisu cíle obsahuje příkazy, nástroj NMAKE tyto příkazy spustí místo příkazů v pravidle.
Priorita odvozených pravidel
Pokud je pravidlo odvození definováno více než jednou, NMAKE použije definici nejvyšší priority. Následující seznam zobrazuje pořadí priorit od nejvyšších po nejnižší:
Pravidlo odvození definované v souboru pravidel; pozdější definice mají přednost.
Pravidlo odvození definované v
Tools.ini; pozdější definice mají přednost.Předdefinované pravidlo odvození