GNU Make on tööriist, mis aitab lähtekoodist genereerida käivitatavaid programme ja töödelda ka muid projekti allikaväliseid faile. Make saab käivitatavate failide loomise ja muude mitte-lähtefailide töötlemise loogika failist nimega a makefile või a Makefile.
Miks teha?
-
Make on de-facto tööriist käivitatavate programmide loomiseks lähtekoodist avatud lähtekoodiga maailmas.
-
Make võimaldab lõppkasutajatel ehitada käivitatavaid programme, teadmata nende koostamise tehnilisi üksikasju.
-
Kõik täitmisfailide loomise ja mitte-lähtefailide töötlemise üksikasjad on loetletud makefailis - nii saavad kõik inimesed, kes projekti ehitada üritavad, protsessi korratavaks.
-
Kui koodibaas on väga suur, on aeganõudev ja problemaatiline käivitatava faili loomine nullist, kui lähtekoodi muutus on väga väike. Make hoolitseb selle eest. See jälgib, milliseid faile muudetakse, ja lahendab sõltuvuse vastavalt sellele, et ehitada programmi konkreetne osa uuesti üles.
-
Make on programmeerimiskeel agnostiline. Pole vahet, millist programmeerimiskeelt või millist nende dialekti te kasutate. Makefile on shellikäskude tekstifail, mis on korraldatud struktuurselt sõltuvuse ja muu loogikaga programmi ülesehitamiseks ja muude mitte-lähtefailide haldamiseks. Kuna see on hunnik shellikäske, saab seda käivitada kõikjal, kus shellikäske käivitatakse. Windows ei käivita Linuxi shellikäske vaikimisi, kuid saate seda teha Windowsi spetsiaalse versiooniga.
-
Käivitatavate programmide ehitamise ajal luuakse palju vahefaile, mida ei pea hoone valmimisel seal olema. Make kustutab need failid automaatselt. See aitab hoida keskkonda puhtana ja säästab palju väärtuslikku aega.
Marki installimine
Ainult valmistamisest programmide koostamiseks ei piisa. Programmide loomiseks allikast peate oma süsteemi installima kompilaatorid ja muud tööriistad. Niisiis vajame oma eesmärgil täielikku arendusvahendite komplekti.
Linuxi allikate koostamiseks on Debiani-põhistes süsteemides pakett nimega “build-essential” (nt.g. Ubuntu, Linux Mint jne) ning Red Hat'i ja CentOS-i arendustööriistad.
Selle installimiseks Debiani põhistesse süsteemidesse:
apt-get install build-essential
Selle installimiseks CentOSi ja Red Hati käitamisse:
yum groupinstall "Arendustööriistad"
Makefile'iga alustamine
Alustame kirjutades a Tere, Maailm programm C-programmeerimiskeelega.
Meie C-programmi põhifunktsioon asub sees hellomain.c. Faili sisu peaks välja nägema järgmine:
# kaasataint main () my_fun (); tagastama 0;
See kood sisaldab päisefaili hellofun.h, mis sisaldab funktsiooni hello_fun () deklaratsiooni. Hellofuni sisu.h on:
void my_fun ();
My_fun () määratlus elab hellofuni sees.c:
# kaasata# kaasata void my_fun () printf ("Tere maailm!\ n "); return;
See on väga lihtne programm ja me võiksime selle kompenseerida gcc-ga vaid ühe käsurea abil. Kuid tegeliku elu programmid pole nii lihtsad ja nii väikesed kui see. Asjad lähevad üsna kiiresti keerukaks. Allpool kirjutan selle tere maailmaprogrammi koostamiseks vajaliku makefile'i skripti. Selgitan selle erinevaid osi järgmistes osades.
hellomain: hellomain.c hellofun.c gcc -o tere hellomain.c hellomain.c-I.
Hoidke seda koodi failis nimega makefile (ilma faililaiendita). Pange fail kataloogi, kus asuvad C-failid. Suunake oma käsurida selles kataloogis. Käsureal kirjutage make ja vajutage sisestusklahvi. Praeguses kataloogis luuakse käivitatav fail nimega tere. Tulemust saate kontrollida käivitades käivitatava faili järgmise käsuga.
./Tere
Väljundid:
Tere, Maailm!
Reeglid, eesmärgid ja sõltuvused
Makefile skript on reeglite kogu. Reeglid annavad juhiseid, kuidas ehitada sihtmärk või väljund allikast või muudest failidest. Reegel täpsustab ka sihtmärgi sõltuvused. Kõigepealt tuleb sõltuvusreeglid täita, sõltuvalt sellest, kas seda on ajatemplit vaadates juba töödeldud. Meie näites makefile ülal on meil reegel, mille sihtmärk on nimetatud hellomain ja selle sõltuvused. Sihtnimi eraldatakse sõltuvuste loendist kooloniga. Käivitatavad shellikäsklused on loetletud järgmisel real. Shelli käsud peavad algama tabulaatori märgiga.
Kui te ei määra parameetriga käsku make, käivitatakse esimene sihtmärk. Meie näites ei täpsustanud me ühtegi parameetrit ja meil oli hellomain esimese ja ainsa sihtmärgina.
Muutujad
Muutuja on suurepärane viis väärtuse ühekordseks kirjutamiseks ja arvukaks kasutamiseks, kordamata väärtust uuesti ja uuesti. See aitab meil hoida oma koodi KUIV (Ära korda ennast). Kui peate kunagi kogu skripti väärtust muutma, peate lihtsalt muutma seda ühes kohas, et kajastada muutust kõikjal, kui kasutate muutujat.
Meie näites kasutasime gcc kompilaatorina, kuid võib-olla peame kompilaatori millekski muuks muutma. Niisiis saame kompilaatori nime muutujana hoida. Samuti võime kompilaatori lippe hoida teises muutujas, et seda uuesti kasutada. Muutujale väärtuse määramiseks kasutame võrdusmärki (=) ja selle muutuja lugemiseks kasutame $ (muutuja_nimi).
CC = gcc CFLAGS = -I. hellomain: hellomain.c hellofun.c $ (CC) -o tere hellomain.c hellomain.c $ (CFLAGS)
Keskkonna puhastamine
Võimalik, et peame oma keskkonda puhastama. Kui tahame, et iga meie projekti tükk ehitataks nullist üles, peame selle puhastama. Meie lihtsas näites on ainus loodud fail fail Tere käivitatav. Käsitsi kustutamata saame selle kustutada make-ga. Nii saame selle jaoks luua reegli ja nimetada sihtmärgi nimeks puhas.
CC = gcc CFLAGS = -I. hellomain: hellomain.c hellofun.c $ (CC) -o tere hellomain.c hellomain.c $ (CFLAGS) puhas: rm tere
Puhta sihtmärgi shellikäsk on lihtsalt vanaaegne shellikäsk rm. Nüüd käivitage käsurealt:
puhtaks tegema
Vaadake praegust kataloogi, et näha, et Tere käivitatav fail on kadunud.
Näite laiendamine rohkemate probleemide lahendamiseks
Meie lihtsas tere maailma koostamise näites on meil probleem, mida me pole veel lahendanud. hellomain siht vaatab hellomian.c ja hellofun.c failide ajatemplid järgmisel korral, kui proovite seda uuesti kompileerida tegema või tee hellomain. Nii et kui muudate mõnda neist kahest failist, kompileeritakse need uuesti. Aga kui muudad hellofun.h siis see ei kompileeru. See on ootamatu!
Jällegi oleme vahele jätnud keskmise taseme. Me ei genereerinud objektifaile ja lõime otse käivitatava faili. Stseeni taga luuakse objektifailid ajutises kataloogis ja kustutatakse. Enne käivitatava faili loomist tahame luua objektifailid. Seekord nimetame peamiseks sihtmärgiks kõik
kõik: hellomain.o hellofun.o gcc hellomain.o hellofun.o-tere hellomain.o: hellomain.c hellofun.h gcc -I. -c hellomain.c hellofun.o: hellofun.c hellofun.h gcc -I. -c hellofun.c puhas: rm -rf *.o rm tere
Käivitage käsk make uuesti, et näha, kas teie programm ehitab edukalt või mitte. Tulemuse kontrollimiseks käivitage hello käivitatav fail. Vaadake praegust kataloogi ja näete, et objektifailid on loodud. Objektifailide puhastamiseks oleme puhta sihtmärgi juurde lisanud veel ühe rea. See makefile'i skript aitab tere maailma programmi uuesti kompileerida isegi siis, kui hellofun.h fail on muudetud.
Järeldus
Make on Linuxi kasutajate ja programmeerijate jaoks üks olulisemaid tööriistu. Kui olete lõppkasutaja, aitavad teadmised valmistamisest teil Linuxi maailmas palju katkisi asju lahendada. Kui olete programmeerija, ei saa te lihtsalt koodi kirjutades minema minna ja lasta oma kasutajatel välja mõelda, kuidas see lähtekood käivitatavatesse failidesse kompileerida. Lõppkasutajatele peate looma makefile'i skripti, et nad ei mängiks teie allika käivitatavatesse failidesse komponeerimiseks mõnda arvamismängu.
Viited
GNUMake projekti koduleht
GNU Tee dokumentatsioon