GNU Make

GNU Make Tutorial

GNU Make Tutorial

GNU Make je orodje, ki pomaga ustvarjati izvedljive programe iz izvorne kode in obdelovati tudi druge nevirske datoteke iz projekta. Make dobi logiko gradnje izvedljivih datotek in obdelave drugih nevirskih datotek iz datoteke, imenovane makefile ali a Makefile.

Zakaj narediti?

Nameščanje znamke

Za izdelavo programov samo narediti ni dovolj. Za izdelavo programov iz vira morate imeti v sistemu nameščene prevajalnike in druga orodja. Torej za svoj namen potrebujemo celoten nabor razvojnih orodij.

Za zbiranje virov v Linuxu obstaja sistem, imenovan "build-bistven" za sisteme, ki temeljijo na Debianu (npr.g. Ubuntu, Linux Mint itd.) In "Orodja za razvoj" na Red Hat in CentOS.

To namestite v sisteme, ki temeljijo na Debianu:

apt-get install build-bistvenega pomena

Če želite to namestiti na CentOS in Red Hat, zaženite:

yum groupinstall "Orodja za razvoj"

Uvod v Makefile

Začnimo s pisanjem a Pozdravljen, svet program s programskim jezikom C.

Glavna funkcija našega programa C bo v notranjosti hellomain.c. Vsebina datoteke mora biti videti tako:

#include  int main () my_fun (); vrnitev 0;  

Ta koda vključuje glavo datoteke hellofun.h, ki vsebuje izjavo funkcije, imenovane hello_fun (). Vsebina hellofuna.h je:

void my_fun ();

Definicija my_fun () živi znotraj hellofun.c:

#include  #include  void my_fun () printf ("Pozdravljeni, svet!\ n "); vrni;

To je zelo preprost program, ki bi ga lahko zbrali v gcc z eno samo vrstico ukaza. Toda programi v resničnem življenju niso tako preprosti in tako majhni. Stvari se zares kmalu zapletejo.  Spodaj bom napisal potreben skript makefile za sestavljanje tega programa hello world. V naslednjih poglavjih bom razložil različne njegove dele.

hellomain: hellomain.c zdravo.c gcc -o zdravo hellomain.c hellomain.c -I.

To kodo shranite v datoteki, imenovani makefile (brez pripone datoteke). Datoteko shranite v imenik, kjer so datoteke C. Usmerite svojo ukazno vrstico v ta imenik. V ukazno vrstico napišite znamko in pritisnite enter. Izvedljiva datoteka, imenovana hello, bo ustvarjena v trenutnem imeniku. Rezultat lahko preverite z zagonom izvedljive datoteke z naslednjim ukazom.

./zdravo

Izhodi:

Pozdravljen, svet!

Pravila, cilji in odvisnosti

Skript makefile je zbirka pravil. Pravila navajajo, kako zgraditi cilj ali izhod iz izvornih ali drugih datotek. Pravilo določa tudi odvisnosti cilja. Pravila odvisnosti je treba najprej izvesti, odvisno od tega, ali je to že obdelano s pogledom na časovne žige. V našem primeru makefile zgoraj imamo pravilo z imenovanim ciljem hellomain in njegove odvisnosti. Ciljno ime je s seznama odvisnosti ločeno z dvopičjem. Ukazi lupine, ki se bodo izvajali, so navedeni v naslednji vrstici. Ukazi lupine se morajo začeti z znakom zavihka.

Če z ukazom make ne določite nobenega parametra, se izvede prvi cilj. V našem primeru nismo podali nobenega parametra in smo ga imeli hellomain kot prvi in ​​edini cilj.

Spremenljivke

Spremenljivke so odličen način, kako enkrat zapisati vrednost in jo večkrat uporabiti, ne da bi jo vedno znova ponavljali. Pomaga nam obdržati kodo SUHO (Ne ponavljajte se). Če boste kdaj morali spremeniti neko vrednost po celotnem skriptu, jo morate spremeniti na enem mestu, da bo povsod odražala spremembo, če uporabljate spremenljivko.

V našem primeru smo uporabili gcc kot prevajalnik, vendar bomo morda morali prevajalnik spremeniti v nekaj drugega. Torej, lahko ime prevajalnika shranimo v spremenljivko. Zastave prevajalnika lahko obdržimo tudi v drugi spremenljivki, da to ponovno uporabimo. Za nastavitev vrednosti na spremenljivko uporabimo znak enakosti (=), za branje spremenljivke pa $ (ime_premenljivke).

CC = gcc CFLAGS = -I. hellomain: hellomain.c zdravo.c $ (CC) -o zdravo hellomain.c hellomain.c $ (CFLAGS)

Čiščenje okolja

Pogosto bomo morali očistiti svoje okolje. Če želimo, da se vsak del našega projekta obnovi iz nič, ga moramo očistiti. V našem preprostem primeru je ustvarjena edina datoteka zdravo izvršljiv. Ne da bi to ročno izbrisali, lahko to zbrišemo z make. Torej, lahko ustvarimo pravilo za to in cilj poimenujemo kot čisto.

CC = gcc CFLAGS = -I. hellomain: hellomain.c zdravo.c $ (CC) -o zdravo hellomain.c hellomain.c $ (CFLAGS) čisto: rm zdravo

Ukaz lupine v čistem cilju je samo starostni ukaz lupine rm. Zdaj iz ukazne vrstice izvršite:

naredi čisto

Oglejte si trenutni imenik, da vidite, ali je zdravo izvršljiva datoteka je izginila.

Širitev našega primera za reševanje več težav

V našem preprostem primeru kompilacije hello world imamo težavo, ki je še nismo rešili. hellomain tarča gleda zdravo.c in zdravo.c časovni žig datotek, ko ga naslednjič poskusite znova sestaviti naredite ali naredite hellomain. Torej, če spremenite katero koli od teh dveh datotek, bosta znova sestavljeni. Ampak, če se spremeniš zdravo.h potem se ne bo prevedel. To je nepričakovano!

Spet smo preskočili vmesno stopnjo. Predmetnih datotek nismo ustvarili in neposredno izvedljivo. Toda za prizorom se datoteke datotek ustvarijo v začasnem imeniku in izbrišejo. Pred gradnjo izvršljive datoteke želimo ustvariti objektne datoteke. Tokrat glavni cilj imenujemo vse

vsi: hellomain.o zdravo.o gcc hellomain.o zdravo.o -o zdravo hellomain.o: hellomain.c zdravo.h gcc -I. -c hellomain.c zdravo.o: zdravo.c zdravo.h gcc -I. -c zdravo.c čisto: rm -rf *.o rm zdravo

Znova zaženite ukaz make, da preverite, ali vaš program uspešno gradi ali ne. Zaženite zdravo izvršljivo datoteko, da preverite rezultat. Oglejte si trenutni imenik in videli boste, da so ustvarjene datoteke predmetov. Čistemu cilju smo dodali še eno vrstico za čiščenje predmetnih datotek. Ta skript makefile bo pomagal znova sestaviti program hello world, tudi če zdravo.h datoteka je spremenjena.

Zaključek

Make je eno najpomembnejših orodij za uporabnike in programerje linux. Če ste končni uporabnik, vam bo znanje znamke pomagalo popraviti marsikaj pokvarjenega v vašem svetu linuxa. Če ste programer, preprosto ne morete oditi tako, da napišete kodo in pustite uporabnikom, da ugotovijo, kako to izvorno kodo prevesti v izvršljive datoteke. Ustvariti morate skript makefile za končne uporabnike, da ne bodo igrali igre ugibanj za prevajanje vašega vira v izvršljive datoteke.

Reference

Domača stran projekta GNUMake
GNU Naredi dokumentacijo

Microsoft Sculpt Touch Wireless Mouse Review
Pred kratkim sem prebral o Microsoftov kiparski dotik brezžično miško in se odločil za nakup. Potem ko sem ga nekaj časa uporabljal, sem se odločil, d...
Zaslonska sledilna ploščica in kazalec miške AppyMouse za tablične računalnike Windows
Uporabniki tabličnih računalnikov pogosto zgrešijo miškin kazalec, še posebej kadar običajno uporabljajo prenosne računalnike. Pametni telefoni in tab...
Srednji gumb miške ne deluje v sistemu Windows 10
The srednji gumb miške vam pomaga, da se pomikate po dolgih spletnih straneh in zaslonih z veliko podatkov. Če se to ustavi, boste na koncu uporabili ...