Rumah  >  Artikel  >  Operasi dan penyelenggaraan  >  Apakah makefile dalam linux

Apakah makefile dalam linux

青灯夜游
青灯夜游asal
2021-11-26 14:02:444828semak imbas

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.

Apakah makefile dalam linux

Persekitaran pengendalian tutorial ini: sistem linux5.9.8, komputer Dell G3.

1. Apakah Makefile

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

    Urus kompilasi kod, tentukan fail yang hendak disusun, susunan kompilasi dan sama ada penyusunan semula diperlukan; >
  • 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

  • Secara umumnya, adalah OK untuk menamakan Makefile sebagai
  • Makefile

    atau

    makefile
  • , tetapi terdapat banyak sumber Nama fail adalah huruf kecil, jadi lebih ramai pengaturcara menggunakan nama Makefile kerana ia boleh memaparkan Makefile terlebih dahulu.

Jika anda menamakan Makefile dengan nama lain, seperti Makefile_demo, ia juga dibenarkan, tetapi ia harus digunakan dengan cara berikut:

make -f Makefile_demo 4. Peraturan asas Peraturan asas Makefile ialah:

Sasaran: pergantungan

(tab) peraturan

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 test

a b . Jika fail bergantung tidak wujud, cari peraturan untuk menjana fail bergantung.

Sebagai contoh, dalam gambar di atas, peraturan untuk menjana kalkulator ialah gcc main.o add.o sub.o mul.o p.o -o, Makefil akan menyemak utama .o pertama, Sama ada add.o, sub.o, mul.o, p.o wujud, jika tidak, ia akan mencari peraturan untuk menjana fail dependensi.

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. Apakah makefile dalam linux

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

-f

perlu ditambah, seperti: Apakah makefile dalam linux

make -f Makefile_demo

buat bersih:

Kosongkan 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)

7 Pembolehubah biasa

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

8 Pembolehubah automatik

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

Fail make juga memberikan kami sejumlah besar fungsi, dan dua fungsi berikut juga kerap digunakan. Perlu diingatkan bahawa semua fungsi dalam

makefile mesti mempunyai nilai pulangan

. 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 Linux

Atas ialah kandungan terperinci Apakah makefile dalam linux. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn