Rumah > Artikel > Operasi dan penyelenggaraan > Apakah makefile dalam linux
Dalam Linux, makefile ialah peraturan penyusunan fail projek, yang menerangkan peraturan penyusunan dan pemautan keseluruhan projek itu termasuk fail mana yang perlu disusun, fail mana yang tidak perlu disusun dan fail mana yang perlu dikompilasi dahulu, fail mana yang perlu dikompilasi, fail mana yang perlu dibina semula, dsb.
Persekitaran pengendalian tutorial ini: sistem linux5.9.8, komputer Dell G3.
Makefile boleh dianggap sebagai peraturan kompilasi fail projek, menerangkan peraturan penyusunan dan pemautan keseluruhan projek.
Projek peringkat perusahaan biasanya mempunyai banyak fail sumber, yang kadangkala dikelaskan ke dalam direktori yang berbeza mengikut fungsi, jenis dan modul Kadangkala berbilang program disimpan dalam satu direktori.
Makefle dilahirkan untuk menyelesaikan masalah bagaimana untuk menyusun beberapa kod di atas Ia mentakrifkan satu set peraturan yang menentukan fail mana yang perlu disusun dahulu, fail mana yang perlu disusun kemudian dan fail mana yang harus disusun. disusun semula.
Semua yang terlibat dalam menyusun keseluruhan projek boleh diterangkan dalam Makefile. Dalam erti kata lain, Makefile boleh mengautomasikan penyusunan projek projek kami tanpa perlu memasukkan sekumpulan fail sumber dan parameter secara manual setiap kali. Kelebihan
Makefile ialah ia boleh mencapai "kompilasi autonomi". Boleh dikatakan bahawa mana-mana program sumber Linux disertakan dengan Makefile. 2. Kelebihan Makefile
Jimat masa kompilasi. Jika fail berubah, hanya susun semula fail ini tanpa menyusun semula keseluruhan projek; Makefiles biasanya hanya perlu ditulis sekali dan tidak perlu diubah terlalu lama kemudian.
3. Peraturan penamaan
atau
makefilemake -f Makefile_demo 4. Peraturan asas Peraturan asas Makefile ialah:
Sasaran: pergantungan
Sasaran --> Sasaran fail yang perlu dijana
Pergantungan --> fail
tab -->Setiap peraturan mesti bermula dengan tab , ruang tidak dibenarkan
Sebagai contoh, kami sering menulis ujian gcc. c -o test, Menggunakan Makefile, ia boleh ditulis sebagai:Antaranya, ujian di baris pertama ialah sasaran yang akan dihasilkan, test.c ialah kebergantungan, dan baris kedua ialah peraturan untuk menjana ujian daripada ujian.c.
Kadangkala terdapat berbilang matlamat dalam Makefile, tetapi Makefile akan menetapkan matlamat pertama sebagai matlamat utama. 5. Prinsip kerja
Penjanaan sasaran:test: test.c gcc test.c -o testa b . Jika fail bergantung tidak wujud, cari peraturan untuk menjana fail bergantung.
Sebagai contoh, jika dependency main.o tiada, Makefile akan melihat di bawah untuk melihat sama ada terdapat peraturan untuk menjana main.o. Apabila ia mendapati bahawa peraturan gcc main.c -o main.o boleh menjana main.o, ia menggunakan peraturan ini untuk menjana main.o, dan kemudian menjana kalkulator matlamat muktamad. Seluruh proses adalah untuk mencari kebergantungan ke bawah, dan kemudian laksanakan arahan ke atas untuk menjana matlamat utama.
Kemas kini sasaran:a. Periksa semua kebergantungan sasaran Jika sebarang kebergantungan dikemas kini, jana semula sasaran; . Jika fail sasaran lebih lewat daripada fail bergantung, ia perlu dikemas kini.
Sebagai contoh, jika main.c diubah suai, sasaran utama.o akan disusun semula Apabila main.o dikemas kini, kalkulator sasaran muktamad juga akan disusun semula. Kemas kini fail lain juga dilakukan secara analogi.
6. Pelaksanaan perintah
buat:
Gunakan arahan ini untuk menjana fail sasaran mengikut peraturan yang telah ditetapkan.
Jika nama fail Makefile bukan Makefile atau makefile, pilihan
-fperlu ditambah, seperti:
make -f Makefile_demoKosongkan fail perantaraan (fail.o) dan fail sasaran akhir yang dijana semasa proses penyusunan.
Jika fail bernama clean wujud dalam direktori semasa, arahan ini tidak akan dilaksanakan.
-->Penyelesaian: Pengisytiharan sasaran pseudo: .PHONY:clean
Simbol khas:
-: Menunjukkan bahawa walaupun ralat berlaku semasa pelaksanaan arahan ini, arahan seterusnya akan terus dilaksanakan. Contohnya:
-rm a.o build/
@: Menunjukkan bahawa arahan hanya akan dilaksanakan tanpa bergema. Apabila peraturan am dilaksanakan, peraturan pelaksanaan akan dicetak pada terminal Selepas menambah simbol ini, hanya arahan akan dilaksanakan dan peraturan yang dilaksanakan tidak akan digemakan. Contohnya:
@echo $(SOURCE)
takrifan pembolehubah dan tugasan:
pembolehubah ialah. digunakan secara langsung Definisi boleh dilengkapkan dengan memberikan nilai, seperti:
SERTAKAN = ./include/
Nilai boleh ubah:
Sertakannya dalam kurungan dan tambah tanda dolar, seperti:
FOO = $(OBJ)
Pembolehubah terbina dalam sistem:
biasanya huruf besar, seperti CC , PWD, CFLAG, dsb.
Sesetengahnya mempunyai nilai lalai, ada yang tidak. Contohnya, yang biasa:
CPPFLAGS: Pilihan yang diperlukan oleh prapemproses seperti: -I
CFLAGS: Parameter yang digunakan semasa penyusunan –Wall –g -c
LDFLAGS : Pilihan yang digunakan oleh pustaka pautan –L -l
Nilai lalai pembolehubah boleh diubah suai Contohnya, nilai lalai CC ialah cc, tetapi ia boleh diubah suai kepada gcc: CC. =gcc
Pembolehubah automatik yang biasa digunakan:
Makefile menyediakan banyak pembolehubah automatik, tetapi tiga berikut biasanya digunakan. Pembolehubah automatik ini hanya boleh digunakan dalam arahan dalam peraturan dan tidak boleh digunakan di tempat lain.
$@ --> Sasaran dalam peraturan
$
Contohnya:
apl: main.c func1.c fun2.c
gcc $^ - o $@
di mana : $^ bermaksud main.c func1.c fun2.c, $
Peraturan corak:Peraturan corak hendaklah menggunakan % dalam keadaan sasaran dan kebergantungan untuk memadankan fail yang sepadan, seperti main.c, func1.c dalam direktori , func2.c tiga fail, penyusunan tiga fail ini boleh dilengkapkan dengan satu peraturan:
%.o:%.c
$(CC) –c $
Peraturan corak ini bermaksud:
main.o dijana oleh main.c,
func1.o dijana oleh func1.c,
func2.o dijana oleh func2.c
Ini ialah peranan peraturan corak, yang boleh memadankan semua fail dalam direktori pada satu masa.
9. Fungsi
. Dalam contoh berikut, katakan terdapat tiga fail main.c, func1.c dan func2.c dalam direktori.
wildcard:digunakan untuk mencari fail jenis tertentu dalam direktori yang ditentukan, dan parameter berikut ialah jenis fail direktori, contohnya:
src = $ (wildcard ./src/*.c)
Ayat ini bermaksud: Cari semua fail dengan akhiran .c dalam direktori ./src dan berikannya kepada pembolehubah src.
Selepas pelaksanaan arahan selesai, nilai src ialah: main.c func1.c fun2.c.
patsubst:Penggantian padanan, seperti contoh berikut, digunakan untuk mencari semua fail yang berakhir dengan .c daripada direktori src dan menggantikannya dengan fail .o , Dan tetapkan ia kepada obj.
obj = $(patsubst %.c ,%.o ,$(src))
Gantikan semua fail dengan akhiran .c dalam pembolehubah src dengan .o.
Selepas arahan dilaksanakan, nilai obj ialah main.o func1.o func2.o
Khususnya, jika anda ingin meletakkan semua fail .o dalam direktori obj, anda boleh gunakan kaedah berikut:
ob = $(patsubst ./src/%.c, ./obj/%.o, $(src))
Cadangan berkaitan: "
Tutorial Video LinuxAtas ialah kandungan terperinci Apakah makefile dalam linux. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!