Bloky popisů

Bloky popisu tvoří jádro souboru pravidel. Popisují cíle nebo soubory, které se mají vytvořit, a jejich závislosti, soubory potřebné k vytvoření cílů. Blok popisu může obsahovat příkazy, které popisují, jak vytvořit cíle ze závislostí. Blok popisu je řádek závislosti, volitelně následovaný blokem příkazů:

targets... : dependents...
    commands...

Čáry závislostí

Čára závislosti určuje jeden nebo více cílů a nula nebo více závislých. Pokud cíl neexistuje nebo má dřívější časové razítko než závislé, nástroj NMAKE spustí příkazy v bloku příkazů. Nástroj NMAKE také spustí blok příkazů, pokud je cílem pseudotarget. Tady je příklad řádku závislostí:

hi_bye.exe : hello.obj goodbye.obj helper.lib

V této přímce hi_bye.exe závislostí je cílem. Jeho závislosti jsou hello.obj, goodbye.obja helper.lib. Řádek závislostí říká NMAKE, aby se cíl sestavil vždy hello.obj, goodbye.objnebo helper.lib se změnil v poslední době než hi_bye.exe.

Cíl musí být na začátku řádku. Nedá se odsadit mezerami ani tabulátory. K oddělení cílů od závislých objektů použijte dvojtečku (:). Mezi cíli, oddělovačem dvojtečky (:) a závislými objekty jsou povolené mezery nebo tabulátory. Chcete-li rozdělit řádek závislosti, použijte zpětné lomítko (\) za cílem nebo závislým.

Před spuštěním bloků příkazů nástroj NMAKE zkontroluje všechny závislosti a všechna příslušná pravidla odvozování a vytvoří strom závislostí. Strom závislostí určuje kroky potřebné k úplné aktualizaci cíle. Nástroj NMAKE rekurzivně kontroluje, jestli je závislý sám cílem v jiném seznamu závislostí. Po sestavení stromu závislostí nástroj NMAKE zkontroluje časová razítka. Pokud jsou některé závislé ve stromu novější než cíl, nástroj NMAKE cíl sestaví.

Cíle

Oddíl cíle řádku závislosti určuje jeden nebo více cílů. Cílem může být libovolný platný název souboru, název adresáře nebo pseudotarget. Více cílů oddělte jedním nebo více mezerami nebo tabulátory. Cíle nerozlišuje malá a velká písmena. Cesty jsou povoleny s názvy souborů. Cíl a jeho cesta nesmí překročit 256 znaků. Pokud je cílem předcházející dvojtečka jeden znak, použijte oddělení mezery. V opačném případě NMAKE interpretuje kombinaci dvojtečky písmen jako specifikátor jednotky.

Více cílů

Nástroj NMAKE vyhodnocuje více cílů v jedné závislosti, jako by byly zadány v samostatném bloku popisu.

Toto pravidlo například:

bounce.exe leap.exe : jump.obj
   echo Building...

se vyhodnotí takto:

bounce.exe : jump.obj
   echo Building...

leap.exe : jump.obj
   echo Building...

Kumulativní závislosti

Závislosti jsou kumulativní v bloku popisu, pokud se cíl opakuje.

Například tato sada pravidel,

bounce.exe : jump.obj
bounce.exe : up.obj
   echo Building bounce.exe...

se vyhodnotí takto:

bounce.exe : jump.obj up.obj
   echo Building bounce.exe...

Pokud máte více cílů v několika řádcích závislostí v jednom bloku popisu, nástroj NMAKE je vyhodnotí, jako by byly zadány v samostatném bloku popisu. Blok příkazů však používají pouze cíle na posledním řádku závislosti. NMAKE se pokusí použít pravidlo odvozování pro ostatní cíle.

Například tato sada pravidel,

leap.exe bounce.exe : jump.obj
bounce.exe climb.exe : up.obj
   echo Building bounce.exe...

se vyhodnotí takto:

leap.exe : jump.obj
# invokes an inference rule

bounce.exe : jump.obj up.obj
   echo Building bounce.exe...

climb.exe : up.obj
   echo Building bounce.exe...

Cíle ve více blocích popisů

Pokud chcete aktualizovat cíl ve více než jednom bloku popisu pomocí různých příkazů, zadejte dvě po sobě jdoucí dvojtečky (::) mezi cíli a závislými položkami.

target.lib :: one.asm two.asm three.asm
    ml one.asm two.asm three.asm
    lib target one.obj two.obj three.obj
target.lib :: four.c five.c
    cl /c four.c five.c
    lib target four.obj five.obj

Vedlejší efekty závislostí

Můžete zadat cíl s dvojtečku (:) na dvou řádcích závislostí v různých umístěních. Pokud se příkazy zobrazí jenom za jedním z řádků, NMAKE interpretuje závislosti, jako by řádky sousedily nebo zkombinovaly. Nevyvolá pravidlo odvozování pro závislost, která nemá žádné příkazy. Místo toho NMAKE předpokládá, že závislosti patří do jednoho bloku popisu a spustí příkazy zadané s druhou závislostí. Zvažte tuto sadu pravidel:

bounce.exe : jump.obj
   echo Building bounce.exe...

bounce.exe : up.obj

se vyhodnotí takto:

bounce.exe : jump.obj up.obj
   echo Building bounce.exe...

K tomuto efektu nedojde, pokud se použije dvojtečka (::). Například tato sada pravidel:

bounce.exe :: jump.obj
   echo Building bounce.exe...

bounce.exe :: up.obj

se vyhodnotí takto:

bounce.exe : jump.obj
   echo Building bounce.exe...

bounce.exe : up.obj
# invokes an inference rule

Pseudocíle

Pseudotarget je popisek použitý místo názvu souboru na řádku závislosti. Interpretuje se jako soubor, který neexistuje, a proto je zastaralý. NMAKE předpokládá, že časové razítko pseudotargetu je stejné jako nejnovější ze všech jeho závislých. Pokud neobsahuje žádné závislé osoby, předpokládá se aktuální čas. Pokud se pseudotarget používá jako cíl, jeho příkazy se vždy spustí. Pseudotarget používaný jako závislý se musí také objevit jako cíl v jiné závislosti. Tato závislost ale nemusí obsahovat blok příkazů.

Názvy Pseudotarget se řídí pravidly syntaxe názvu souboru pro cíle. Pokud ale název nemá příponu, může překročit limit 8 znaků pro názvy souborů a může mít délku až 256 znaků.

Pseudotargety jsou užitečné, když chcete, aby nástroj NMAKE sestavil více než jeden cíl automaticky. NMAKE sestavuje pouze cíle zadané na příkazovém řádku. Nebo pokud není zadán žádný cíl příkazového řádku, sestaví pouze první cíl v první závislosti v souboru pravidel. NMAKE můžete říct, aby sestavil více cílů, aniž by je vypisoval jednotlivě na příkazovém řádku. Napište blok popisu se závislostí obsahující pseudotarget a uveďte cíle, které chcete vytvořit jako závislé. Pak tento blok popisu umístěte nejprve do souboru pravidel nebo zadejte pseudotarget na příkazovém řádku NMAKE.

V tomto příkladu je update pseudotarget.

UPDATE : *.*
COPY $** c:\product\release

Při vyhodnocování aktualizace nástroj NMAKE zkopíruje všechny soubory v aktuálním adresáři na zadanou jednotku a adresář.

V následujícím souboru pravidel se pseudotarget all sestaví jak project1.exe v project2.exe případě, že je na příkazovém řádku zadán cíl all nebo žádný cíl. Pseudotarget setenv změní proměnnou prostředí LIB před .exe aktualizací souborů:

all : setenv project1.exe project2.exe

project1.exe : project1.obj
    LINK project1;

project2.exe : project2.obj
    LINK project2;

setenv :
    set LIB=\project\lib

Závislosti

Na řádku závislosti zadejte za dvojtečku () nebo dvojtečku (:) nebo dvojitou dvojtečku (::) pomocí libovolného platného názvu souboru nebo pseudotargetu. Více závislých objektů oddělte pomocí jedné nebo více mezer nebo tabulátoru. Závislé osoby nerozlišují malá a velká písmena. Cesty jsou povoleny s názvy souborů.

Odvozené závislé prvky

Kromě závislostí, které explicitně vypíšete na řádku závislostí, může NMAKE předpokládat odvozenou závislost. Odvozená závislost je odvozena z pravidla odvozování a je vyhodnocena před explicitními závislostmi. Pokud je odvozený závislý v porovnání s cílem zastaralý, NMAKE vyvolá blok příkazu pro závislost. Pokud odvozený závislý objekt neexistuje nebo je zastaralý ve srovnání s jeho vlastními závislými položkami, nástroj NMAKE nejprve aktualizuje odvozenou závislost. Další informace o odvozených závislých závislosti naleznete v tématu Pravidla odvozování.

Cesty hledání závislých prvků

Můžete zadat volitelnou vyhledávací cestu pro každou závislá. Tady je syntaxe, která určuje sadu adresářů, které se mají prohledávat:

{directory[;adresář...]}Závislé

Uzavřete názvy adresářů do složených závorek ({ }). Oddělte více adresářů středníkem (;). Nejsou povoleny žádné mezery ani tabulátory. Nástroj NMAKE vyhledá závislý jako první v aktuálním adresáři a potom v seznamu adresářů v uvedeném pořadí. Makro můžete použít k určení části nebo celé cesty hledání. Tuto cestu hledání používá pouze zadaná závislá cesta.

Příklad cesty hledání v adresáři

Tento řádek závislosti ukazuje, jak vytvořit specifikaci adresáře pro vyhledávání:

reverse.exe : {\src\omega;e:\repo\backwards}retro.obj

Cíl reverse.exe má jeden závislý, retro.obj. Složený seznam určuje dva adresáře. Nástroj NMAKE nejprve vyhledá retro.obj v aktuálním adresáři. Pokud tam není, nástroj NMAKE prohledá \src\omega adresář a pak e:\repo\backwards adresář.

Viz také

NMAKE – referenční zdroje