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. DalamTools.ini
, semua opsi diizinkan kecuali/F
, ,/HELP
,/NOLOGO
,/X
dan/?
. Perubahan yang ditentukan dalam blok deskripsi tidak berlaku hingga blok deskripsi berikutnya. PembaruanMAKEFLAGS
direktif ini ; perubahan diwariskan selama rekursi jikaMAKEFLAGS
ditentukan.!ERROR
TeksMenampilkan 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.!MESSAGE
TeksMenampilkan 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 olehINCLUDE
makro, yang awalnya diatur keINCLUDE
variabel lingkungan. Berguna untuk meneruskan.SUFFIXES
pengaturan,.PRECIOUS
, dan aturan inferensi ke makefiles rekursif.!IF
constant_expressionMemproses pernyataan antara
!IF
dan berikutnya!ELSE
atau!ENDIF
jika constant_expression mengevaluasi ke nilai bukan nol.!IFDEF
macro_nameMemproses pernyataan antara
!IFDEF
dan berikutnya!ELSE
atau!ENDIF
jika macro_name ditentukan. Makro null dianggap ditentukan.!IFNDEF
macro_nameMemproses pernyataan antara
!IFNDEF
dan berikutnya!ELSE
atau!ENDIF
jika macro_name tidak ditentukan.!ELSE
[IF
constant_expression |IFDEF
macro_name macro_name ] |IFNDEF
Memproses pernyataan antara
!ELSE
dan berikutnya!ENDIF
jika pernyataan sebelumnya!IF
, ,!IFDEF
atau!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
!IF
blok , ,!IFDEF
atau!IFNDEF
. Teks apa pun setelah!ENDIF
pada baris yang sama diabaikan.!UNDEF
macro_nameTidak terdefinis macro_name.
Ekspresi dalam praproses makefile
!IF
atau !ELSE IF
constant_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. DEFINED
dalam 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