GNU Make

GNU Make Tutorial

GNU Make Tutorial

GNU Make je alat koji pomaže u generiranju izvršnih programa iz izvornog koda, a također obrađuje i druge izvorne datoteke iz projekta. Make dobiva logiku izgradnje izvršnih datoteka i obrade ostalih datoteka koje nisu izvorne iz datoteke koja se naziva makefile ili a Makefile.

Zašto napraviti?

Instaliranje Make

Samo stvaranje nije dovoljno za izgradnju programa. Da biste izgradili programe iz izvora, na vašem sustavu trebaju biti instalirani kompajleri i drugi alati. Dakle, potreban nam je čitav niz razvojnih alata za našu svrhu.

Za kompajliranje izvora na Linuxu postoji paket koji se naziva "bitan za izgradnju" na sustavima temeljenim na Debianu (npr.g. Ubuntu, Linux Mint, itd.) I "Alati za razvoj" na Red Hat-u i CentOS-u.

Da biste ovo instalirali na sustave temeljene na Debianu:

apt-get install build-bitno

Da biste ovo instalirali na CentOS i Red Hat trčanje:

yum groupinstall "Alati za razvoj"

Početak rada s Makefileom

Krenimo s pisanjem a Pozdrav svijete program s programskim jezikom C.

Glavna funkcija našeg C programa nalazit će se unutra hellomain.c. Sadržaj datoteke trebao bi izgledati ovako:

#include  int main () moja_zabava (); return 0;  

Ovaj kod uključuje datoteku zaglavlja hellofun.h koja sadrži deklaraciju funkcije koja se naziva hello_fun (). Sadržaj hellofuna.h je:

void my_fun ();

Definicija my_fun () živi unutar hellofuna.c:

#include  #include  void my_fun () printf ("Pozdrav svijetu!\ n "); povratak;

Ovo je vrlo jednostavan program i mogli bismo ga kompilirati s gcc-om sa samo jednim retkom naredbe. Ali programi iz stvarnog života nisu tako jednostavni i tako mali kao ovaj. Stvari se vrlo brzo zakompliciraju.  U nastavku ću napisati potrebnu skriptu makefile za sastavljanje ovog programa hello world. Objasnit ću njegove različite dijelove u sljedećim odjeljcima.

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

Čuvajte ovaj kod u datoteci koja se naziva makefile (bez ikakvog nastavka datoteke). Stavite datoteku u direktorij u kojem su datoteke C. Usmjerite naredbeni redak u ovaj direktorij. U naredbeni redak napišite make i pritisnite enter. Izvršna datoteka nazvana hello generirat će se u trenutnom direktoriju. Rezultat možete provjeriti pokretanjem izvršne datoteke pomoću sljedeće naredbe.

./zdravo

Izlazi:

Pozdrav svijete!

Pravila, ciljevi i ovisnosti

Makefile skripta je zbirka pravila. Pravila upućuju Napravite kako izgraditi cilj ili izlaz iz izvora ili drugih datoteka. Pravilo također određuje ovisnosti cilja. Pravila ovisnosti moraju se prvo izvršiti, ovisno o tome je li to već obrađeno gledajući vremenske oznake. U našem primjeru makefile gore, imamo pravilo s imenovanim ciljem hellomain i njegove ovisnosti. Ime cilja odvojeno je dvotočkom sa popisa ovisnosti. Naredbe ljuske koje će se izvršiti navedene su u sljedećem retku. Naredbe ljuske moraju započinjati znakom kartice.

Ako naredbom make ne navedete parametar, izvršava se prva meta. U našem primjeru nismo naveli nijedan parametar, a jesmo hellomain kao prva i jedina meta.

Varijable

Varijable su sjajan način da se vrijednost jednom napiše i koristi više puta bez ponavljanja vrijednosti iznova i iznova. Pomaže nam da naš kod ostane suh (nemojte se ponavljati). Ako ikada trebate promijeniti neku vrijednost u cijeloj skripti, samo je trebate promijeniti na jednom mjestu kako bi odrazila promjenu svugdje ako koristite varijablu.

U našem primjeru smo koristili gcc kao kompajler, ali možda ćemo morati promijeniti kompajler u nešto drugo. Dakle, ime kompajlera možemo zadržati u varijabli. Također, zastave kompajlera možemo zadržati u nekoj drugoj varijabli da bi se to ponovno koristilo. Za postavljanje vrijednosti na varijablu koristimo znak jednakosti (=), a za čitanje te varijable koristimo $ (ime_ varijable).

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

Čišćenje okoliša

Često ćemo možda morati očistiti svoj okoliš. Ako želimo da se svaki dio našeg projekta obnovi ispočetka, moramo ga očistiti. U našem jednostavnom primjeru jedina datoteka koja se generira je zdravo izvršna. Bez ručnog brisanja, to možemo izbrisati pomoću make. Dakle, možemo stvoriti pravilo za to i cilj imenovati kao čist.

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

Naredba ljuske u čistom cilju samo je prastara naredba ljuske rm. Sada iz naredbenog retka izvršite:

učiniti čistim

Pogledajte trenutni direktorij da vidite da li zdravo izvršna datoteka je nestala.

Proširivanje našeg primjera radi rješavanja više problema

U našem jednostavnom primjeru kompilacije hello world imamo problem koji još nismo riješili. hellomain meta gleda pozdravni.c i zdravo.c vremenske oznake datoteka sljedeći put kada je pokušate ponovno sastaviti napraviti ili napraviti hellomain. Dakle, ako promijenite bilo koju od te dvije datoteke, one će se ponovno sastaviti. Ali, ako se promijenite zdravo.h tada se neće ponovno sastaviti. To je neočekivano!

Opet smo preskočili srednju razinu. Nismo generirali objektne datoteke i izravno smo generirali izvršnu datoteku. Ali, iza scene, datoteke objekata kreiraju se u privremenom direktoriju i brišu. Želimo generirati objektne datoteke prije izgradnje izvršne datoteke. Ovaj put glavnu metu imenujemo kao svi

svi: 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

Ponovno pokrenite naredbu make da biste provjerili gradi li vaš program uspješno ili ne. Pokrenite hello izvršnu datoteku da biste provjerili rezultat. Pogledajte trenutni direktorij i vidjet ćete da su stvorene datoteke objekata. Čistom cilju dodali smo još jedan redak za čišćenje objektnih datoteka. Ova skripta makefile pomoći će u ponovnom sastavljanju programa hello world čak i ako zdravo.h datoteka je izmijenjena.

Zaključak

Make je jedan od najvažnijih alata za korisnike Linuxa i programere. Ako ste krajnji korisnik, znanje o makeu pomoći će vam popraviti mnoge slomljene stvari u vašem svijetu linuxa. Ako ste programer, jednostavno ne možete otići tako da napišete kôd i pustiti korisnike da shvate kako kompajlirati taj izvorni kod u izvršne datoteke. Morate stvoriti skriptu makefile za krajnje korisnike, tako da oni ne igraju neku igru ​​pogađanja kako bi kompilirali vaš izvor u izvršne datoteke.

Reference

Početna stranica projekta GNUMake
GNU Napravite dokumentaciju

Najbolji Linux Distros za igre na sreću 2021. godine
Linux operativni sustav daleko je prevalio svoj izvorni, jednostavni izgled zasnovan na poslužitelju. Ovaj se OS posljednjih godina izuzetno poboljšao...
Kako snimiti i struji svoju igraću sesiju na Linuxu
U prošlosti se igranje igara smatralo samo hobijem, ali s vremenom je igračka industrija zabilježila ogroman rast u pogledu tehnologije i broja igrača...
Najbolje igre za ručno praćenje
Oculus Quest nedavno je predstavio sjajnu ideju ručnog praćenja bez kontrolera. Sa sve većim brojem igara i aktivnosti koje izvršavaju podršku bilo fo...