Share via


Prapemrosesan makefile

Anda dapat mengontrol sesi NMAKE dengan menggunakan direktif dan ekspresi pra-pemrosesan. Instruksi praproses dapat ditempatkan di makefile atau di Tools.ini. Dengan menggunakan direktif, Anda dapat memproses makefile Anda secara kondisional, menampilkan pesan kesalahan, menyertakan makefiles lain, melepaskan makro, dan mengaktifkan atau menonaktifkan opsi tertentu.

Arahan Praproses Makefile

Arahan pra-pemrosesan tidak peka huruf besar/kecil. Tanda seru awal (!) harus muncul di awal baris. Nol atau lebih spasi atau tab dapat muncul setelah tanda seru, untuk indentasi.

  • !CMDSWITCHES{ +opsi opsi- | } ...

    Mengaktifkan atau menonaktifkan setiap opsi yang tercantum. Spasi atau tab harus muncul sebelum + operator atau - . Tidak ada spasi yang dapat muncul antara operator dan huruf opsi. Huruf tidak peka huruf besar/kecil dan ditentukan tanpa garis miring (/). Untuk mengaktifkan beberapa opsi dan menonaktifkan yang lain, gunakan spesifikasi terpisah dari !CMDSWITCHES.

    Hanya /D, /I, /N, dan /S dapat digunakan dalam makefile. Dalam Tools.ini, semua opsi diizinkan kecuali /F, , /HELP, /NOLOGO, /Xdan /?. Perubahan yang ditentukan dalam blok deskripsi tidak berlaku hingga blok deskripsi berikutnya. Pembaruan MAKEFLAGSdirektif ini ; perubahan diwariskan selama rekursi jika MAKEFLAGS ditentukan.

  • !ERRORtext

    Menampilkan teks dalam kesalahan U1050, lalu menghentikan NMAKE, bahkan jika /K, , .IGNORE/I, !CMDSWITCHES, atau pengubah perintah tanda hubung (-) digunakan. Spasi atau tab sebelum teks diabaikan.

  • !MESSAGEtext

    Menampilkan teks ke output standar. Spasi atau tab sebelum teks diabaikan.

  • !INCLUDE [ < ] nama file [ > ]

    Membaca nama file sebagai makefile, lalu melanjutkan dengan makefile saat ini. NMAKE mencari nama file terlebih dahulu di direktori yang ditentukan atau saat ini, lalu secara rekursif melalui direktori makefiles induk apa pun, maka, jika nama file diapit oleh tanda kurung sudut (< >), dalam direktori yang ditentukan oleh INCLUDE makro, yang awalnya diatur ke INCLUDE variabel lingkungan. Berguna untuk meneruskan .SUFFIXES pengaturan, .PRECIOUS, dan aturan inferensi ke makefiles rekursif.

  • !IFconstant_expression

    Memproses pernyataan antara !IF dan berikutnya !ELSE atau !ENDIF jika constant_expression mengevaluasi ke nilai bukan nol.

  • !IFDEFmacro_name

    Memproses pernyataan antara !IFDEF dan berikutnya !ELSE atau !ENDIF jika macro_name ditentukan. Makro null dianggap ditentukan.

  • !IFNDEFmacro_name

    Memproses pernyataan antara !IFNDEF dan berikutnya !ELSE atau !ENDIF jika macro_name tidak ditentukan.

  • !ELSE[ IFconstant_expressionIFDEF | macro_name | IFNDEFmacro_name ]

    Memproses pernyataan antara !ELSE dan berikutnya !ENDIF jika pernyataan sebelumnya !IF, , !IFDEFatau !IFNDEF dievaluasi ke nol. Kata kunci opsional memberikan kontrol lebih lanjut terhadap prapemroscesing.

  • !ELSEIF

    Sinonim untuk !ELSE IF.

  • !ELSEIFDEF

    Sinonim untuk !ELSE IFDEF.

  • !ELSEIFNDEF

    Sinonim untuk !ELSE IFNDEF.

  • !ENDIF

    Menandai akhir !IFblok , , !IFDEFatau !IFNDEF . Teks apa pun setelah !ENDIF pada baris yang sama diabaikan.

  • !UNDEFmacro_name

    Tidak terdefinis macro_name.

Ekspresi dalam praproses makefile

!IF atau !ELSE IFconstant_expression terdiri dari konstanta bilangan bulat (dalam notasi desimal atau bahasa C), konstanta string, atau perintah. Gunakan tanda kurung untuk mengelompokkan ekspresi. Ekspresi menggunakan aritmatika bilangan bulat panjang yang ditandatangani gaya C; angka dalam bentuk pelengkap dua 32-bit dalam rentang -2147483648 ke 2147483647.

Ekspresi dapat menggunakan operator yang bertindak berdasarkan nilai konstanta, kode keluar dari perintah, string, makro, dan jalur sistem file.

Operator praproses makefile

Ekspresi praproses makefile dapat menggunakan operator yang bertindak berdasarkan nilai konstanta, kode keluar dari perintah, string, makro, dan jalur sistem file. Untuk mengevaluasi ekspresi, praprosesor terlebih dahulu memperluas makro, lalu menjalankan perintah, lalu melakukan operasi. Ini mengevaluasi operasi dalam urutan pengelompokan eksplisit dalam tanda kurung, dan kemudian dalam urutan prioritas operator. Hasilnya adalah nilai konstanta.

Operator DEFINED adalah operator logis yang bertindak berdasarkan nama makro. Ekspresi DEFINED( macro_name ) ini benar jika macro_name ditentukan, meskipun tidak memiliki nilai yang ditetapkan. DEFINEDdalam kombinasi dengan atau !ELSE IF setara !IFDEF dengan !IF atau !ELSE IFDEF. Namun, tidak seperti arahan ini, DEFINED dapat digunakan dalam ekspresi kompleks.

Operator EXIST adalah operator logis yang bertindak pada jalur sistem file. EXIST( path ) adalah true jika jalur ada. Hasil dari EXIST dapat digunakan dalam ekspresi biner. Jika jalur berisi spasi, sertakan dalam tanda kutip ganda.

Untuk membandingkan dua string, gunakan operator kesetaraan (==) atau operator ketidaksetaraan (!=). Sertakan string dalam tanda kutip ganda.

Konstanta bilangan bulat dapat menggunakan operator unary untuk negasi numerik (-), pelengkap seseorang (~), dan negasi logis (!).

Ekspresi dapat menggunakan operator berikut. Operator dengan prioritas yang sama dikelompokkan bersama-sama, dan grup tercantum dalam urutan prioritas yang menurun. Operator unary mengaitkan dengan operand di sebelah kanan. Operator biner dengan operan terkait prioritas yang sama dari kiri ke kanan.

Operator Deskripsi
DEFINED(macro_name) Menghasilkan nilai logis untuk status definisi macro_name saat ini.
EXIST(jalan) Menghasilkan nilai logis untuk keberadaan file di jalur.
! LOGIS tidak sah TIDAK.
~ Pelengkap unary.
- Negasi unary.
* Perkalian.
/ Pembagian.
% Modulus (sisanya).
+ Penambahan.
- Pengurangan.
<< Bitwise shift kiri.
>> Pergeseran bit ke kanan.
<= Kurang dari atau sama dengan.
>= Lebih besar dari atau sama dengan.
< Kurang.
> Lebih besar dari.
== Kesetaraan.
!= Ketidaksetaraan.
& Bitwise DAN.
^ Bitwise XOR.
| Bitwise ATAU.
&& Logika AND.
|| Logika-OR.

Catatan

Operator XOR bitwise (^) sama dengan karakter escape, dan harus diloloskan (sebagai ^^) saat digunakan dalam ekspresi.

Menjalankan program dalam pra-pemrosesan

Untuk menggunakan kode keluar perintah selama pra-pemrosesan, tentukan perintah, dengan argumen apa pun, dalam tanda kurung siku ([ ]). Makro apa pun diperluas sebelum perintah dijalankan. NMAKE mengganti spesifikasi perintah dengan kode keluar perintah, yang dapat digunakan dalam ekspresi untuk mengontrol pra-pemrosesan.

Contoh

!IF [my_command.exe arg1 arg2] != 0
!MESSAGE my_command.exe failed!
!ENDIF

Baca juga

Referensi NMAKE