GNU Make ir rīks, kas palīdz ģenerēt izpildāmās programmas no avota koda un apstrādāt arī citus ar avotu nesaistītus failus no projekta. Make iegūst loģiku, kā veidot izpildāmos failus un apstrādāt citus avota failus no faila ar nosaukumu a makefile vai a Makefile.
Kāpēc Make?
-
Make ir de facto rīks izpildāmo programmu veidošanai no pirmkodiem atvērtā koda pasaulē.
-
Programma Make ļauj lietotājiem izveidot izpildāmās programmas, nezinot tehnisko informāciju par to izveidi.
-
Visa informācija par to, kā izveidot izpildāmos failus un apstrādāt failus, kas nav avota faili, ir uzskaitīti makefile failā - tātad procesu var atkārtot visi cilvēki vai sistēmas, kas mēģina izveidot projektu.
-
Ja koda bāze ir ļoti liela, tad ir laikietilpīga un problemātiska izpildāmā faila izveidošana no nulles, ja avota koda izmaiņas ir ļoti mazas. Make par to rūpējas. Tas izseko mainītos failus un attiecīgi atrisina atkarību, lai izveidotu programmas konkrētās daļas atjaunošanu.
-
Make ir programmēšanas valodas agnostiķis. Tas neinteresē, kādu programmēšanas valodu vai kuru dialektu jūs izmantojat. Makefile ir čaulas komandu teksta fails, kas strukturēti organizēts ar atkarību un citu loģiku, lai izveidotu programmu un pārvaldītu citus avota failus. Tā kā tā ir virkne čaulas komandu, tā var darboties jebkurā vietā, kur darbojas čaulas komanda. Windows pēc noklusējuma nedarbina linux shell komandas, taču to varat izdarīt, izmantojot Windows specializēto versiju.
-
Veidojot izpildāmās programmas, tiek izveidoti daudzi starpfaili, kuriem nav jābūt, kad ēka ir pabeigta. Make izdzēš šos failus automātiski. Tas palīdz uzturēt vidi tīru un ietaupa daudz vērtīga laika.
Programmas Make instalēšana
Lai izveidotu programmas, nepietiek tikai ar izgatavošanu. Lai izveidotu programmas no avota, sistēmā jābūt instalētiem kompilatoriem un citiem rīkiem. Tātad mūsu mērķiem mums ir nepieciešams pilns izstrādes rīku komplekts.
Lai apkopotu avotus Linux, Debian balstītās sistēmās ir pakete ar nosaukumu “build-essential” (piem.,.g. Ubuntu, Linux Mint utt.) Un “Attīstības rīki” Red Hat un CentOS.
Lai to instalētu Debian sistēmās:
apt-get install build-essential
Lai to instalētu CentOS un Red Hat palaist:
yum groupinstall "Izstrādes rīki"
Darba sākšana ar Makefile
Sāksim, rakstot a Sveika pasaule programma ar C programmēšanas valodu.
Mūsu C programmas galvenā funkcija būs iekšpusē hellomain.c. Faila saturam vajadzētu izskatīties šādi:
# iekļautint main () my_fun (); atgriešanās 0;
Šis kods ietver galvenes failu hellofun.h, kas satur funkcijas, ko sauc par hello_fun (), deklarāciju. Hellofun saturs.h ir:
anulēt my_fun ();
My_fun () definīcija dzīvo hellofun iekšienē.c:
# iekļaut# iekļaut void my_fun () printf ("Sveika pasaule!\ n "); return;
Šī ir ļoti vienkārša programma, un mēs to varētu apkopot ar gcc tikai ar vienu komandrindu. Bet reālās dzīves programmas nav tik vienkāršas un tik mazas kā šis. Lietas kļūst ļoti sarežģītas. Zemāk es uzrakstīšu nepieciešamo makefile skriptu šīs sveikas pasaules programmas sastādīšanai. Dažādās tā daļās es paskaidrošu nākamajās sadaļās.
hellomain: hellomain.c hellofun.c gcc -o sveiki hellomain.c hellomain.c-es.
Saglabājiet šo kodu failā ar nosaukumu makefile (bez faila paplašinājuma). Ievietojiet failu direktorijā, kur atrodas C faili. Norādiet komandrindu šajā direktorijā. Komandrindā rakstiet make un nospiediet enter. Pašreizējā direktorijā tiks izveidots izpildāms fails ar nosaukumu hello. Rezultātu var pārbaudīt, palaižot izpildāmo failu ar šādu komandu.
./Sveiki
Rezultāti:
Sveika pasaule!
Noteikumi, mērķi un atkarības
Makefile skripts ir noteikumu kopums. Noteikumi uzdod izveidot, kā izveidot mērķi vai izvadi no avota vai citiem failiem. Noteikums nosaka arī mērķa atkarības. Vispirms jāizpilda atkarības noteikumi atkarībā no tā, vai tas jau ir apstrādāts, aplūkojot laika zīmogus. Mūsu piemērā makefile Iepriekš mums ir noteikums ar mērķi hellomain un tās atkarības. Mērķa nosaukumu no atkarības saraksta atdala kols. Shell komandas, kas tiks izpildītas, ir norādītas nākamajā rindā. Apvalka komandām jāsākas ar tabulēšanas rakstzīmi.
Ja ar make komandu nenorādat nevienu parametru, tiek izpildīts pirmais mērķis. Mūsu piemērā mēs nenorādījām nevienu parametru, un mums tas bija hellomain kā pirmais un vienīgais mērķis.
Mainīgie
Mainīgais ir lielisks veids, kā vienu reizi ierakstīt vērtību un izmantot to vairākas reizes, neatkārtojot vērtību vēl un vēl. Tas palīdz mums saglabāt mūsu kodu DRY (neatkārtojiet sevi). Ja jums kādreiz ir jāmaina kāda vērtība visā skriptā, jums tas vienkārši jāmaina vienā vietā, lai atspoguļotu izmaiņas visur, ja izmantojat mainīgo.
Mūsu piemērā mēs to izmantojām gcc kā kompilators, bet mums var būt nepieciešams mainīt kompilatoru uz kaut ko citu. Tātad, mēs varam saglabāt kompilatora vārdu mainīgajā. Mēs arī varam saglabāt kompilatora karodziņus citā mainīgajā, lai to atkārtoti izmantotu. Lai iestatītu vērtību mainīgajam, mēs izmantojam vienādības zīmi (=) un, lai lasītu šo mainīgo, mēs izmantojam $ (mainīgais_nosaukums).
CC = gcc CFLAGS = -I. hellomain: hellomain.c hellofun.c $ (CC) -o sveiki hellomain.c hellomain.c $ (CFLAGS)
Vides tīrīšana
Mums bieži var būt jātīra vide. Ja mēs vēlamies, lai katrs mūsu projekta gabals tiktu pārbūvēts no jauna, tas ir jātīra. Mūsu vienkāršajā piemērā vienīgais ģenerētais fails ir Sveiki izpildāms. Nedzēšot to manuāli, mēs varam to izdzēst ar make. Tātad, mēs varam izveidot tam noteikumu un nosaukt mērķi kā tīrs.
CC = gcc CFLAGS = -I. hellomain: hellomain.c hellofun.c $ (CC) -o sveiki hellomain.c hellomain.c $ (CFLAGS) tīrs: rm sveiki
Apvalka komanda tīrā mērķī ir tikai vecā čaulas komanda rm. Tagad no komandrindas izpildiet:
padarīt tīru
Apskatiet pašreizējo direktoriju, lai redzētu, ka Sveiki izpildāmā faila vairs nav.
Paplašinot mūsu piemēru, lai atrisinātu citas problēmas
Mūsu vienkāršajā labas pasaules kompilācijas piemērā mums ir problēma, kuru mēs vēl neesam atrisinājuši. hellomain mērķis skatās hellomian.c un hellofun.c failu laika zīmogi nākamajā reizē, kad mēģināt to atkārtoti kompilēt veidot vai padarīt hellomain. Tātad, ja mainīsit kādu no šiem diviem failiem, tie tiks kompilēti. Bet, ja maināt hellofun.h tad tas netiks kompilēts. Tas ir negaidīti!
Atkal mēs esam izlaiduši vidējo līmeni. Mēs neveidojām objekta failus un tieši ģenerējām izpildāmo failu. Bet aiz ainas objekta faili tiek izveidoti pagaidu direktorijā un izdzēsti. Pirms izpildāmā faila izveidošanas mēs vēlamies ģenerēt objekta failus. Šoreiz galveno mērķi nosaucam kā visi
visi: hellomain.o hellofun.o gcc hellomain.o hellofun.o-sveiks hellomain.o: hellomain.c hellofun.h gcc -I. -c hellomain.c hellofun.o: hellofun.c hellofun.h gcc -I. -c hellofun.c tīrs: rm -rf *.o rm sveiki
Vēlreiz palaidiet komandu make, lai redzētu, vai jūsu programma tiek veidota veiksmīgi vai nē. Palaidiet sveicamo izpildāmo failu, lai pārbaudītu rezultātu. Apskatiet pašreizējo direktoriju un redzēsiet, ka tiek izveidoti objektu faili. Mēs tīrām mērķim esam pievienojuši vēl vienu rindiņu, lai notīrītu objektu failus. Šis makefile skripts palīdzēs atkārtoti apkopot sveiks pasaules programmu, pat ja hellofun.h fails ir modificēts.
Secinājums
Make ir viens no vissvarīgākajiem rīkiem Linux lietotājiem un programmētājiem. Ja esat galalietotājs, tad zināšanas par marķējumu palīdzēs jums novērst daudzas šķeltas lietas jūsu linux pasaulē. Ja esat programmētājs, tad vienkārši nevarat aiziet, uzrakstot kodu un ļaujiet lietotājiem izdomāt, kā šo avota kodu apkopot izpildāmos failos. Jums jāizveido makefile skripts galalietotājiem, lai viņi nespēlētu minējumu spēli, lai apkopotu jūsu avotu izpildāmajos failos.
Atsauces
GNUMake projekta mājas lapa
GNU Izveidot dokumentāciju