Bagikan melalui


Blok deskripsi

Blok deskripsi membentuk inti makefile. Mereka menjelaskan target, atau file yang akan dibuat, dan dependensinya, file yang diperlukan untuk membuat target. Blok deskripsi mungkin menyertakan perintah, yang menjelaskan cara membuat target dari dependensi. Blok deskripsi adalah baris dependensi, secara opsional diikuti oleh blok perintah:

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

Baris dependensi

Baris dependensi menentukan satu atau beberapa target, dan nol atau lebih dependen. Jika target tidak ada, atau memiliki tanda waktu sebelumnya daripada dependen, NMAKE menjalankan perintah di blok perintah. NMAKE juga menjalankan blok perintah jika target adalah pseudotarget. Berikut adalah contoh baris dependensi:

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

Dalam baris dependensi ini, hi_bye.exe adalah targetnya. Dependensinya adalah hello.obj, , goodbye.objdan helper.lib. Baris dependensi memberi tahu NMAKE untuk membangun target setiap kali hello.obj, , goodbye.objatau helper.lib telah berubah lebih baru daripada hi_bye.exe.

Target harus berada di awal baris. Ini tidak dapat diindentasi dengan spasi atau tab apa pun. Gunakan titik dua (:) untuk memisahkan target dari dependen. Spasi atau tab diizinkan antara target, pemisah titik dua (:), dan dependen. Untuk memisahkan baris dependensi, gunakan garis miring terbalik (\) setelah target atau dependen.

Sebelum menjalankan blok perintah, NMAKE memindai semua dependensi dan aturan inferensi yang berlaku untuk membangun pohon dependensi. Pohon dependensi menentukan langkah-langkah yang diperlukan untuk memperbarui target sepenuhnya. NMAKE memeriksa secara rekursif apakah dependen itu sendiri adalah target dalam daftar dependensi lain. Setelah membangun pohon dependensi, NMAKE memeriksa stempel waktu. Jika ada dependen di pohon yang lebih baru dari target, NMAKE membangun target.

Target

Bagian target dari baris dependensi menentukan satu atau beberapa target. Target dapat berupa nama file, nama direktori, atau pseudotarget yang valid. Pisahkan beberapa target dengan menggunakan satu atau beberapa spasi atau tab. Target tidak peka huruf besar/kecil. Jalur diizinkan dengan nama file. Target dan jalurnya tidak boleh melebihi 256 karakter. Jika target yang mendahului titik dua adalah karakter tunggal, gunakan ruang pemisahan. Jika tidak, NMAKE menginterpretasikan kombinasi titik dua huruf sebagai penentu drive.

Beberapa target

NMAKE mengevaluasi beberapa target dalam satu dependensi seolah-olah masing-masing ditentukan dalam blok deskripsi terpisah.

Misalnya, aturan ini:

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

dievaluasi sebagai:

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

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

Dependensi kumulatif

Dependensi bersifat kumulatif dalam blok deskripsi, jika target diulang.

Misalnya, seperangkat aturan ini,

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

dievaluasi sebagai:

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

Ketika Anda memiliki beberapa target dalam beberapa baris dependensi dalam satu blok deskripsi, NMAKE mengevaluasinya seolah-olah masing-masing ditentukan dalam blok deskripsi terpisah. Namun, hanya target di baris dependensi terakhir yang menggunakan blok perintah. NMAKE mencoba menggunakan aturan inferensi untuk target lain.

Misalnya, seperangkat aturan ini,

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

dievaluasi sebagai:

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

Target dalam beberapa blok deskripsi

Untuk memperbarui target dalam lebih dari satu blok deskripsi menggunakan perintah yang berbeda, tentukan dua titik dua berturut-turut (::) antara target dan dependen.

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

Efek samping dependensi

Anda mungkin menentukan target dengan titik dua (:) dalam dua baris dependensi di lokasi yang berbeda. Jika perintah hanya muncul setelah salah satu baris, NMAKE menginterpretasikan dependensi seolah-olah baris berdekatan atau digabungkan. Ini tidak memanggil aturan inferensi untuk dependensi yang tidak memiliki perintah. Sebaliknya, NMAKE mengasumsikan dependensi milik satu blok deskripsi, dan menjalankan perintah yang ditentukan dengan dependensi lainnya. Pertimbangkan seperangkat aturan ini:

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

bounce.exe : up.obj

dievaluasi sebagai:

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

Efek ini tidak terjadi jika titik dua (::) digunakan. Misalnya, seperangkat aturan ini:

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

bounce.exe :: up.obj

dievaluasi sebagai:

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

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

Pseudotargets

Pseudotarget adalah label yang digunakan sebagai pengganti nama file di baris dependensi. Ini ditafsirkan sebagai file yang tidak ada, dan begitu juga yang sudah kedaluarsa. NMAKE mengasumsikan tanda waktu pseudotarget sama dengan yang terbaru dari semua dependennya. Jika tidak memiliki dependen, waktu saat ini diasumsikan. Jika pseudotarget digunakan sebagai target, perintahnya selalu dijalankan. Pseudotarget yang digunakan sebagai dependen juga harus muncul sebagai target dalam dependensi lain. Namun, dependensi tersebut tidak perlu memiliki blok perintah.

Nama Pseudotarget mengikuti aturan sintaks nama file untuk target. Namun, jika nama tidak memiliki ekstensi, nama tersebut dapat melebihi batas 8 karakter untuk nama file, dan panjangnya bisa hingga 256 karakter.

Pseudotargets berguna ketika Anda ingin NMAKE membangun lebih dari satu target secara otomatis. NMAKE hanya membangun target yang ditentukan pada baris perintah. Atau, jika tidak ada target baris perintah yang ditentukan, target hanya membangun target pertama dalam dependensi pertama dalam makefile. Anda dapat memberi tahu NMAKE untuk membangun beberapa target tanpa mencantumkannya satu per satu di baris perintah. Tulis blok deskripsi dengan dependensi yang berisi pseudotarget, dan cantumkan target yang ingin Anda buat sebagai dependennya. Kemudian, tempatkan blok deskripsi ini terlebih dahulu di makefile, atau tentukan pseudotarget pada baris perintah NMAKE.

Dalam contoh ini, UPDATE adalah pseudotarget.

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

Ketika UPDATE dievaluasi, NMAKE menyalin semua file di direktori saat ini ke drive dan direktori yang ditentukan.

Dalam makefile berikut, pseudotarget all membangun dan project1.exe project2.exe jika salah satu all atau tidak ada target ditentukan pada baris perintah. Pseudotarget setenv mengubah variabel lingkungan LIB sebelum file diperbarui .exe :

all : setenv project1.exe project2.exe

project1.exe : project1.obj
    LINK project1;

project2.exe : project2.obj
    LINK project2;

setenv :
    set LIB=\project\lib

Dependen

Dalam baris dependensi, tentukan nol atau lebih dependen setelah titik dua (:) atau titik dua (::), menggunakan nama file atau pseudotarget yang valid. Pisahkan beberapa dependen dengan menggunakan satu atau beberapa spasi atau tab. Dependen tidak peka huruf besar/kecil. Jalur diizinkan dengan nama file.

Dependen yang disimpulkan

Bersama dengan dependen yang Anda cantumkan secara eksplisit di baris dependensi, NMAKE dapat mengasumsikan dependen yang disimpulkan. Dependen yang disimpulkan berasal dari aturan inferensi, dan dievaluasi sebelum dependen eksplisit. Ketika dependen yang disimpulkan sudah kedaluarsa dibandingkan dengan targetnya, NMAKE memanggil blok perintah untuk dependensi. Jika dependen yang disimpulkan tidak ada, atau sudah kedaluarsa dibandingkan dengan dependennya sendiri, NMAKE terlebih dahulu memperbarui dependen yang disimpulkan. Untuk informasi selengkapnya tentang dependen yang disimpulkan, lihat Aturan inferensi.

Jalur pencarian untuk dependen

Anda dapat menentukan jalur pencarian opsional untuk setiap dependen. Berikut adalah sintaks untuk menentukan sekumpulan direktori yang akan dicari:

{directory[;direktori...]}Tergantung

Sertakan nama direktori dalam tanda kurung kurawal ({ }). Pisahkan beberapa direktori dengan titik koma (;). Tidak ada spasi atau tab yang diizinkan. NMAKE mencari dependen terlebih dahulu di direktori saat ini, lalu dalam daftar direktori dalam urutan yang ditentukan. Anda dapat menggunakan makro untuk menentukan bagian atau semua jalur pencarian. Hanya dependen yang ditentukan yang menggunakan jalur pencarian ini.

Contoh jalur pencarian direktori

Baris dependensi ini menunjukkan cara membuat spesifikasi direktori untuk pencarian:

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

Target reverse.exe memiliki satu dependen, retro.obj. Daftar yang diapit kurung kurawal menentukan dua direktori. NMAKE mencari retro.obj di direktori saat ini terlebih dahulu. Jika tidak ada, NMAKE mencari \src\omega direktori, lalu e:\repo\backwards direktori.

Lihat juga

Referensi NMAKE