Açıklama blokları

Açıklama blokları bir derleme dosyasının çekirdeğini oluşturur. Hedefleri veya oluşturulacak dosyaları ve bunların bağımlılıklarını, hedefleri oluşturmak için gereken dosyaları açıklar. Açıklama bloğu, bağımlılıklardan hedeflerin nasıl oluşturulacağını açıklayan komutlar içerebilir. Açıklama bloğu, isteğe bağlı olarak bir komut bloğunun ardından gelen bir bağımlılık satırıdır:

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

Bağımlılık satırları

Bağımlılık satırı bir veya daha fazla hedefi ve sıfır veya daha fazla bağımlıyı belirtir. Bir hedef yoksa veya bağımlıdan daha eski bir zaman damgasına sahipse, NMAKE komutları komut bloğunda yürütür. NMAKE ayrıca hedef bir pseudotarget ise komut bloğunu yürütür. Aşağıda örnek bir bağımlılık satırı verilmişti:

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

Bu bağımlılık satırında hi_bye.exe hedeftir. Bağımlılıkları , goodbye.objve helper.libşeklindedirhello.obj. Bağımlılık satırı, NMAKE'ye hedefi hello.objher , goodbye.objveya helper.lib değerinden daha yakın zamanda değiştiğinde oluşturmasını hi_bye.exesöyler.

Hedefin satırın başında olması gerekir. Hiçbir boşluk veya sekmeyle girintilenemez. Hedefleri bağımlılardan ayırmak için iki nokta üst üste (:) kullanın. Hedefler, iki nokta üst üste ayırıcısı (): ve bağımlılar arasında boşluklara veya sekmelere izin verilir. Bağımlılık satırını bölmek için bir hedef veya bağımlıdan sonra ters eğik çizgi (\) kullanın.

Komut bloklarını yürütmeden önce, NMAKE bağımlılık ağacı oluşturmak için tüm bağımlılıkları ve geçerli çıkarım kurallarını tarar. Bağımlılık ağacı, hedefi tam olarak güncelleştirmek için gereken adımları belirtir. NMAKE, bir bağımlının başka bir bağımlılık listesindeki bir hedef olup olmadığını yinelemeli olarak denetler. Bağımlılık ağacını derledikten sonra NMAKE zaman damgalarını denetler. Ağaçtaki bağımlılardan herhangi biri hedeften daha yeniyse, NMAKE hedefi oluşturur.

Hedefler

Bağımlılık satırının hedefler bölümü bir veya daha fazla hedefi belirtir. Hedef herhangi bir geçerli dosya adı, dizin adı veya pseudotarget olabilir. Bir veya daha fazla boşluk veya sekme kullanarak birden çok hedefi ayırın. Hedefler büyük/küçük harfe duyarlı değildir. Yollara dosya adlarıyla izin verilir. Hedef ve yolu 256 karakteri aşamaz. İki nokta üst üste işaretinden önceki hedef tek bir karakterse, ayırma alanı kullanın. Aksi takdirde, NMAKE harf-iki nokta birleşimini bir sürücü tanımlayıcısı olarak yorumlar.

Birden çok hedef

NMAKE, her biri ayrı bir açıklama bloğunda belirtilmiş gibi tek bir bağımlılıktaki birden çok hedefi değerlendirir.

Örneğin, bu kural:

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

şu şekilde değerlendirilir:

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

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

Birikmeli bağımlılıklar

Bir hedef yinelenirse bağımlılıklar bir açıklama bloğunda birikmeli olur.

Örneğin, bu kurallar kümesi,

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

şu şekilde değerlendirilir:

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

Tek bir açıklama bloğunda birden çok bağımlılık satırına birden çok hedefiniz olduğunda, NMAKE bunları her biri ayrı bir açıklama bloğunda belirtilmiş gibi değerlendirir. Ancak yalnızca son bağımlılık satırındaki hedefler komut bloğunu kullanır. NMAKE, diğer hedefler için çıkarım kuralı kullanmayı dener.

Örneğin, bu kurallar kümesi,

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

şu şekilde değerlendirilir:

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

Birden çok açıklama bloğundaki hedefler

Farklı komutları kullanarak birden fazla açıklama bloğundaki bir hedefi güncelleştirmek için, hedefler ve bağımlılar arasında ardışık iki nokta üst üste (::) belirtin.

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

Bağımlılık yan etkileri

İki nokta üst üste (:) farklı konumlardaki iki bağımlılık satırına sahip bir hedef belirtebilirsiniz. Komutlar satırlardan yalnızca birinden sonra görünürse, NMAKE bağımlılıkları satırlar bitişik veya birleştirilmiş gibi yorumlar. Komutu olmayan bağımlılık için çıkarım kuralı çağırmaz. Bunun yerine, NMAKE bağımlılıkların bir açıklama bloğuna ait olduğunu varsayar ve diğer bağımlılıkla belirtilen komutları yürütür. Bu kural kümesini göz önünde bulundurun:

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

bounce.exe : up.obj

şu şekilde değerlendirilir:

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

Çift iki nokta üst üste (::) kullanıldığında bu etki oluşmaz. Örneğin, bu kural kümesi:

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

bounce.exe :: up.obj

şu şekilde değerlendirilir:

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

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

Sözde Hedefler

Pseudotarget, bağımlılık satırında dosya adı yerine kullanılan bir etikettir. Mevcut olmayan ve güncel olmayan bir dosya olarak yorumlanır. NMAKE, bir pseudotarget'in zaman damgasının tüm bağımlılarının en son sürümüyle aynı olduğunu varsayar. Bağımlı değilse geçerli saat varsayılır. Hedef olarak bir pseudotarget kullanılırsa, komutları her zaman yürütülür. Bağımlı olarak kullanılan bir pseudotarget de başka bir bağımlılıkta hedef olarak görünmelidir. Ancak bu bağımlılığın komut bloğuna sahip olması gerekmez.

Pseudotarget adları, hedefler için dosya adı söz dizimi kurallarını izler. Ancak, adın bir uzantısı yoksa, dosya adları için 8 karakterlik sınırı aşabilir ve en fazla 256 karakter uzunluğunda olabilir.

NMAKE'nin otomatik olarak birden fazla hedef oluşturmasını istediğinizde sahte hedefler kullanışlıdır. NMAKE yalnızca komut satırında belirtilen hedefleri oluşturur. Veya herhangi bir komut satırı hedefi belirtilmezse, derleme dosyasındaki ilk bağımlılıkta yalnızca ilk hedefi oluşturur. NMAKE'ye komut satırında tek tek listelemeden birden çok hedef oluşturmasını söyleyebilirsiniz. Sahte hedef içeren bir bağımlılığı olan bir açıklama bloğu yazın ve oluşturmak istediğiniz hedefleri bağımlı olarak listeleyin. Ardından, bu açıklama bloğunu ilk olarak makefile'a yerleştirin veya NMAKE komut satırında pseudotarget değerini belirtin.

Bu örnekte UPDATE bir sözde hedeftir.

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

UPDATE değerlendirildiğinde, NMAKE geçerli dizindeki tüm dosyaları belirtilen sürücüye ve dizine kopyalar.

Aşağıdaki makefile dosyasında, pseudotarget all hem hem de project1.exe project2.exe komut satırında hedef belirtildiyse veya belirtilmemişse all derleniyor. Pseudotarget setenv , dosyalar güncelleştirilmeden önce LIB ortam değişkenini .exe değiştirir:

all : setenv project1.exe project2.exe

project1.exe : project1.obj
    LINK project1;

project2.exe : project2.obj
    LINK project2;

setenv :
    set LIB=\project\lib

Bağımlılıklar

Bağımlılık satırında, geçerli bir dosya adı veya sözde hedef kullanarak iki nokta üst üste (:) veya çift iki nokta üst üste ():: sonrasında sıfır veya daha fazla bağımlı belirtin. Bir veya daha fazla boşluk veya sekme kullanarak birden çok bağımlıyı ayırın. Bağımlılar büyük/küçük harfe duyarlı değildir. Yollara dosya adlarıyla izin verilir.

Çıkarsanan bağımlılıklar

Bağımlılık satırında açıkça listelediğiniz bağımlılarla birlikte, NMAKE çıkarım yapılan bir bağımlı olduğunu varsayabilir. Çıkarılmış bir bağımlı, çıkarım kuralından türetilir ve açık bağımlılardan önce değerlendirilir. Çıkarsanan bir bağımlı hedefle karşılaştırıldığında güncel olmadığında, NMAKE bağımlılık için komut bloğunu çağırır. Çıkarılan bir bağımlı yoksa veya kendi bağımlılarına kıyasla güncel değilse, NMAKE önce çıkarılan bağımlıyı güncelleştirir. Çıkarımı yapılan bağımlılar hakkında daha fazla bilgi için bkz . Çıkarım kuralları.

Bağımlılıklar için yollar ara

Her bağımlı için isteğe bağlı bir arama yolu belirtebilirsiniz. Aranacak dizin kümesini belirtmek için söz dizimi aşağıdadır:

{directory[;dizin...]}bağımlı

Dizin adlarını ayraç içine alın ({ }). Birden çok dizini noktalı virgülle (;) ayırın. Boşluk veya sekmeye izin verilmez. NMAKE, bağımlıyı önce geçerli dizinde, ardından dizin listesinde belirtilen sırada arar. Arama yolunun bir bölümünü veya tamamını belirtmek için makro kullanabilirsiniz. Bu arama yolunu yalnızca belirtilen bağımlı kullanır.

Dizin arama yolu örneği

Bu bağımlılık satırı, arama için dizin belirtimlerinin nasıl oluşturulacağını gösterir:

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

Hedefin reverse.exe bağımlı bir tane vardır: retro.obj. Ayraç içine alınmış liste iki dizin belirtir. NMAKE önce geçerli dizinde öğesini retro.obj arar. Orada değilse, NMAKE dizininde \src\omega , sonra da dizininde e:\repo\backwards arama yapın.

Ayrıca bkz.

NMAKE Başvurusu