Wildcards dan Foreach dalam Makefile

Wildcards Dan Foreach Dalam Makefile



Fail sentiasa terdiri daripada jenis kandungan yang berbeza: sama ada fail teks ringkas, fail kod program atau sebarang fail make. Jenis kandungan mana-mana fail menjadikannya unik dan membezakannya daripada format fail lain. Sama seperti itu, makefile terdiri daripada peraturan yang menggunakan elemen berbeza untuk melaksanakan kerjanya dengan betul. Daripada elemen tersebut, terdapat wildcard dan foreach yang diperlukan untuk melakukan sesuatu yang unik dan tambahan. Dalam panduan ini, kita akan membincangkan kuasa kad bebas dan foreach semasa ia digunakan dalam fail buatan.

Kad bebas dalam Makefile

Secara umum, kad bebas diketahui sebagai faktor yang tidak dapat diramalkan dan boleh mengubah keadaan dalam apa jua cara yang mungkin. Kad bebas dalam fail make digunakan untuk melakukan bonus mengesan semua corak yang mungkin daripada direktori kerja semasa, sama ada fail atau mana-mana folder. Fail sumber ini boleh terdiri daripada sebarang jenis.







Untuk menggunakan wildcard dalam makefile, anda harus menggunakan kata kunci “wildcard” yang mengikuti asterisk “*” atau “?” tanda dan sambungan fail yang disambungkan melalui titik. Anda juga boleh menggunakan “?” tanda untuk mencari satu aksara dan “*” untuk memadankan sebarang bilangan aksara. Keseluruhan struktur ini harus digunakan dalam kurungan dan tanda '$'. Sebagai contoh, kami mengisytiharkan pembolehubah 'SRCS' yang mendapat fail nilainya melalui kad bebas. Kad bebas ini mencari semua fail dengan corak 'cpp' di hujungnya.





Foreach dalam Makefile

Fungsi foreach makefile berfungsi betul-betul seperti gelung foreach dalam bahasa pengaturcaraan - berulang ke atas item dalam senarai. Fungsi foreach dalam makefile melakukan tindakan tertentu pada setiap item senarai. Elemen ini boleh menjadi pembolehubah atau mana-mana fail sumber. Sebagai contoh, kami menghuraikan sintaks fungsi foreach dalam makefile melalui pembolehubah SOURCES yang mengandungi senarai tiga fail sumber. Fungsi foreach menggunakan pembolehubah SOURCES ini untuk mencipta nama yang sama untuk tiga fail objek dengan mengulangi senarai fail sumber dan menyimpannya ke pembolehubah 'OBJEK' yang lain. Dua baris terakhir menunjukkan cara peraturan makefile boleh digunakan untuk mencipta fail objek untuk setiap fail C selepas lelaran.





SUMBER := fail1.c fail2.c fail3.c
OBJEK := $ ( foreach src,$ ( SUMBER ) ,$ ( src:.c=.o ) )
$OBJECTS : % .O: % .c
$ ( CC ) $ ( CFLAGS ) -c $ < -O $ @

Contoh 1: Menggunakan Kad Liar

Untuk memaparkan ilustrasi dan kerja kad bebas dan fungsi foreach, kami memperkenalkan fail C++. Fail 'salary.cpp' ini dimulakan dengan penggunaan pengepala 'iostream' untuk membolehkan penggunaan aliran input dan output yang lancar. Kaedah utama mengisytiharkan pembolehubah 's' jenis integer dan pernyataan 'cout' untuk meminta nilai input semasa runtime. Strim input standard 'cin' mendapat nilai daripada pengguna pada masa jalan dan menyimpannya ke dalam pembolehubah 's'. 'Cout' memaparkan nilai yang dimasukkan oleh pengguna pada skrin konsol.

#include
menggunakan ruang nama std;
int utama ( ) {
int s;
cout << 'Masukkan Gaji:' ;
makan >> s;
cout << ' \n Gaji:' << s << endl;
kembali 0 ;
}



Kami memulakan fail make dengan pembolehubah 'CXX' yang mentakrifkan pengkompil untuk C++, dan pembolehubah CXXFLAGS memegang bendera untuk pengkompil C++. Pembolehubah EXECUTABLE memegang nama fail 'hello' boleh laku yang dijana selepas pelaksanaan makefile. Pembolehubah SRCS mendapat semua fail C++ daripada direktori semasa menggunakan kad bebas “*” untuk mencari sebarang corak yang berakhir dengan “.cpp”. Pembolehubah OBJS memegang nama fail objek yang akan dibuat menggunakan pembolehubah SRCS, menggantikan sambungan 'cpp' dengan 'o'. Sasaran 'semua' lalai membina fail make dan ia bergantung pada pembolehubah EXECUTABLE.

Peraturan pertama mencipta fail 'hello' sasaran yang bergantung pada fail objek pembolehubah OBJS (nama fail objek) menggunakan nama fail yang dijana melalui pembolehubah 'OBJS'. Peraturan makefile kedua menjana fail objek dengan sambungan '.o' yang bergantung pada fail C++ selepas menyusun fail kod C++. Di sini, '%' ialah kad bebas untuk mencari nama fail mana-mana corak yang berakhir dengan 'cpp'. Pada akhirnya, sasaran bersih menggunakan perintah 'rm' untuk membersihkan secara paksa fail boleh laku dan objek yang baru dijana daripada direktori menggunakan bendera '-f'.

CXX = g++
CXXFLAGS = -Dinding -std =c++ sebelas
BOLEH DILAKSANAKAN = hello
SRCS = $ ( kad bebas * .cpp )
OBJS = $ ( SRCS:.cpp=.o )
semua: $ ( BOLEH DILAKSANAKAN )
$ ( BOLEH DILAKSANAKAN ) : $ ( OBJS )
$ ( CXX ) $ ( CXXFLAGS ) -O $ @ $ ( OBJS )
% .O: % .cpp
$ ( CXX ) $ ( CXXFLAGS ) -c $ < -O $ @
bersih:
rm -f $ ( BOLEH DILAKSANAKAN ) $ ( OBJS )

Setelah menjalankan arahan 'buat', kedua-dua fail sasaran dan objek telah dicipta. Selepas melaksanakan fail 'hello' boleh laku, pengguna diminta untuk memasukkan gaji dan kami menambah '67000'. Pada akhirnya, gaji dipaparkan semula.

buat

Contoh 2: Menggunakan Foreach

Selepas menggunakan kad bebas, tiba masanya untuk menggunakan fungsi foreach dalam makefile. Selebihnya kod makefile adalah sama. Pada baris 6, kami memulakan pembolehubah lain iaitu 'NAMES' dengan senarai tiga nilai - Kate, Kim, Tim. Sasaran lalai 'semua' bergantung pada pembolehubah EXECUTABLE (nama fail sasaran 'hello') dan setiap pernyataan. Fungsi 'addprefix' mengulangi pembolehubah 'NAMES' untuk menjana nama sasaran secara dinamik dengan memberi awalan 'run_' pada permulaan setiap nama dalam senarai 'NAMES'.

Peraturan pada baris lapan menunjukkan bahawa fail sasaran boleh laku output, iaitu helo, bergantung pada 'OBJS'. Bendera '-o' menjana fail output sasaran menggunakan OBJS. Peraturan pada baris kesepuluh menjana fail objek sasaran menggunakan fail sumber dengan sambungan 'cpp'. Untuk berbuat demikian, bendera '-c' digunakan untuk menyusun fail sumber dan menjana fail objek berkaitan yang diperlukan untuk penjanaan sasaran. Pada baris ketiga belas, kami menggunakan pembolehubah EXECUTABLE untuk menjana output dengan nama berbeza bermula dengan 'run_' sebagai awalan. Pada akhirnya, sasaran bersih dan sasaran Fony akan mengalih keluar dan membersihkan objek dan fail sasaran.

CXX = g++
CXXFLAGS = -Dinding -std =c++ sebelas
# fail sasaran boleh laku
BOLEH DILAKSANAKAN = hello
SRCS = $ ( kad bebas * .cpp )
OBJS = $ ( SRCS:.cpp=.o )
# Senarai nama
NAMA = Kate Kim Tim
# Sasaran
semua: $ ( BOLEH DILAKSANAKAN ) $ ( addprefix run_, $ ( NAMA ) )
$ ( BOLEH DILAKSANAKAN ) : $ ( OBJS )
$ ( CXX ) $ ( CXXFLAGS ) -O $ @ $ ( OBJS )
% .O: % .cpp
$ ( CXX ) $ ( CXXFLAGS ) -c $ < -O $ @
# Buat sasaran untuk setiap nama
lari_ % : $ ( BOLEH DILAKSANAKAN )
. / $ ( BOLEH DILAKSANAKAN ) $*
bersih:
rm -f $ ( BOLEH DILAKSANAKAN ) $ ( OBJS )
# Sasaran palsu
.FONI: semua bersih

Penggunaan arahan 'buat' menjana sasaran 'hello' boleh laku dan menjalankan program untuk setiap nama yang dinyatakan dalam pembolehubah 'NAMES'.

buat

Anda juga boleh mengubah suai output anda menggunakan nama daripada senarai dengan awalan 'run_'.

Buat lari_Kim

Kesimpulan

Panduan ini membincangkan penggunaan kad bebas dan konsep foreach dalam fail make semasa membincangkan sintaksnya secara berasingan. Selepas itu, kami membincangkan contoh kod untuk menghuraikan setiap kerja mereka dengan output untuk mendapatkan fail dengan sambungan yang sama dan mengulangi nilai dalam senarai pembolehubah.