Fail sumber dalam projek tidak dikira dalam beberapa direktori mengikut jenis, fungsi dan modul mentakrifkan satu siri peraturan , fail mana yang perlu disusun dahulu, fail mana yang perlu disusun kemudian, fail mana yang perlu disusun semula, dan operasi fungsi yang lebih kompleks boleh dilakukan.
Jadi, faedah makefile ialah - "Kompilasi automatik". Sebaik sahaja ia ditulis, hanya satu arahan buat diperlukan, dan keseluruhan projek disusun secara automatik, yang sangat meningkatkan kecekapan.
make ialah alat arahan yang mentafsir arahan dalam fail make Secara umumnya, kebanyakan IDE mempunyai arahan ini, seperti: Delphi's make, Visual C++'s nmake, dan GNU's di bawah Linux. Dapat dilihat bahawa makefile telah menjadi kaedah penyusunan dalam kejuruteraan. make ialah arahan, dan makefile ialah fail Gunakan kedua-duanya bersama-sama untuk menyelesaikan pembinaan automatik projek.
Sebelum memahami kaedah kebergantungan dan kebergantungan, mari tulis program kecil dalam bahasa C.
Kami mencipta fail make.c dan menulis kod hello make.
Kemudian mari kita buat Makefile lain (makefile juga mungkin, tetapi tidak disyorkan).
Kemudian kami mengedit Makefile dan menulis kod berikut:
Kemudian kami simpan dan keluar.
Kemudian kita boleh melaksanakan arahan buat. Jika ia menggesa bahawa make tidak wujud, ia adalah kerana ia tidak dipasang Anda boleh bertukar untuk memasang sebagai root. Kod pemasangan: yum install make
atau sudo install make
.
Selepas melaksanakan make seperti biasa, paparan berikut akan muncul.
Kemudian kami akan melihat fail dalam direktori semasa.
Kami dapati terdapat program boleh laku tambahan yang dibuat. Kemudian mari jalankan dengan ./make
dan cuba.
Kami akan mendapati bahawa output program boleh laku ini menghasilkan.
Ini ialah alat binaan automatik kami, yang hanya perlu dikonfigurasikan dalam Makefile. Kemudian taip buat terus untuk menyusun kod. Kemudian mari cuba menaip buat lagi.
menggesa kami bahawa program buat adalah yang terkini. Iaitu, jika anda belum mengubah suai atau mengemas kini program. Kemudian ia tidak akan disusun untuk anda kerana program anda belum disentuh Mengapa menyusunnya?
Sekarang mari kita kembali dan menganalisis kod yang ditulis dalam Makefile.
Mula-mula kita bahagikan kepada tiga bahagian
make
make.c
gcc make.c -o make -std=c99
Hubungan antara ketiga-tiga ini ialah make
bergantung kepada make.c
. Kedua-duanya mempunyai kebergantungan , dan gcc make.c -o make -std=c99
ialah kaedah pembuatan yang bergantung pada make.c, yang dipanggil kaedah bergantung .
Apakah kaedah kebergantungan dan kebergantungan?
Satu analogi.
Sekarang penghujung bulan dan perbelanjaan hidup anda sudah tiada. Pada masa ini, anda menelefon ayah anda dan memberitahunya: "Ayah, sudah akhir bulan. Saya tidak mempunyai wang." Ayah kamu akan tahu pada masa ini dan akan memberi kamu perbelanjaan hidup. Di sini, anda dan bapa anda mempunyai hubungan bapa-anak, jadi anda bergantung kepada bapa anda, dan terdapat hubungan pergantungan antara anda. Dan ayah anda memberi anda perbelanjaan hidup, yang merupakan cara untuk anda bergantung pada ayah anda, jadi ini adalah kaedah pergantungan. Jika anda menelefon bapa rakan sebilik anda untuk meminta perbelanjaan hidup pada masa ini, dia akan memberitahu anda untuk keluar. Kerana anda tidak mempunyai hubungan pergantungan sama sekali. Jika anda tidak mempunyai hubungan pergantungan, tidak akan ada kaedah pergantungan.
Jadi prosedur saya adalah sama. make ialah program boleh laku yang dihasilkan. Dan ia bergantung kepada make.c kerana ia disusun daripada make.c. Kaedah bergantung adalah untuk melaksanakan perintah gcc make.c -o make -std=c99
.
Prinsip pergantungan
make akan mencari fail bernama "Makefile" atau "makefile" dalam direktori semasa.
Jika ditemui, ia akan mencari fail sasaran pertama (sasaran) dalam contoh di atas, ia akan mencari fail "hello" dan menggunakan fail ini sebagai dokumen sasaran.
Jika fail hello tidak wujud, atau masa pengubahsuaian fail bagi fail test.o berikutnya yang hello bergantung adalah lebih baharu daripada fail ujian (anda boleh menggunakan sentuhan untuk menguji) , kemudian, dia Perintah yang ditakrifkan kemudian akan dilaksanakan untuk menjana fail ujian.
Jika fail test.o yang bergantung pada ujian tidak wujud, maka make akan mencari kebergantungan fail test.o sasaran dalam fail semasa. ia akan mengikut peraturan itu Jana fail test.o. (Ini sedikit seperti proses tindanan)
Sudah tentu, fail C dan fail H anda wujud, jadi make akan menjana fail test.o, dan kemudian gunakan test.o The fail mengisytiharkan tugas utama membuat, iaitu untuk melaksanakan ujian fail.
Ini ialah kebergantungan keseluruhan make akan mencari kebergantungan fail lapisan demi lapisan sehingga fail sasaran pertama akhirnya disusun.
Semasa proses carian, jika ralat berlaku, contohnya, fail bergantung terakhir tidak dapat ditemui, maka make akan keluar terus dan melaporkan ralat, dan untuk ralat yang ditentukan command , atau kompilasi tidak berjaya, buat abaikan sahaja.
make only cares about file dependencies, iaitu jika fail selepas titik bertindih masih tiada selepas saya menjumpai dependencies, maka saya minta maaf, saya tidak akan berfungsi.
Apabila kita biasanya menulis kod, kita selalunya perlu menyusun dan melaksanakan kod berulang kali.
Sebelum menyusun semula kali seterusnya, anda perlu membersihkan atur cara boleh laku yang dijana kali terakhir. Walau bagaimanapun, anda mungkin membuat kesilapan semasa pembersihan dan memadam fail sumber secara tidak sengaja, yang boleh menyebabkan masalah sekali lagi.
Jadi adakah kami ada penyelesaiannya? Jawapannya sudah tentu.
Mari teruskan mengedit Makefile.
Kami menambah
.PHONY:clean clean: rm -f make
pada asas asalnya.
.PHONY
mengubah suai sasaran pseudo dan sasaran pseudo sentiasa dilaksanakan. clean ialah arahan buat yang ditentukan sendiri, kaedah penggunaannya ialah make clean
Mari cuba arahan ini
Kita dapat melihatnya Ia telah dibersihkan , jadi mengapa sasaran pseudo sentiasa dilaksanakan? Mari jalankan beberapa kali dan lihat.
Kita boleh melaksanakannya sepanjang masa, tetapi bagaimana jika kita melaksanakan make
beberapa kali?
Kami akan mendapati bahawa selepas make dilaksanakan sekali, ia tidak boleh dilaksanakan kerana ia tidak diubah suai oleh .PHONY
. Kemudian saya akan mengubah suainya dengan .PHONY
dan cuba lagi.
Kemudian kita simpan dan keluar, laksanakan make
beberapa kali dan kita dapat melihat bahawa ia digunakan beberapa kali Dilaksanakan. Tetapi saya rasa ini tidak perlu, kerana fail itu belum diubah suai. Penyusunan semula tidak bermakna, jadi tidak disyorkan untuk menambah .PHONY
pada kompilasi automatik Kami menyimpan dan keluar make
beberapa kali. dan kita boleh lihat sehingga ia telah dilaksanakan beberapa kali. Tetapi saya rasa ini tidak perlu, kerana fail itu belum diubah suai. Menyusun semula tidak masuk akal, jadi tidak disyorkan untuk menambah .PHONY
Atas ialah kandungan terperinci Cara menggunakan alat binaan automatik Linux membuat dan Makefile. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!