GNU Make

GNU Make Tutorial

GNU Make Tutorial

GNU Make er et værktøj, der hjælper med at generere eksekverbare programmer fra kildekoden og også behandle andre ikke-kildefiler fra projektet. Make får logikken i at oprette eksekverbare filer og behandle andre ikke-kildefiler fra en fil kaldet a makefile eller a Makefile.

Hvorfor lave?

Installation af mærke

Make alone er ikke nok til at opbygge programmer. For at oprette programmer fra kilden skal du have installeret kompilatorer og andre værktøjer på dit system. Så vi har brug for den fulde serie af udviklingsværktøjer til vores formål.

For at kompilere kilder på Linux er der en pakke kaldet "build-essential" på Debian-baserede systemer (f.eks.g. Ubuntu, Linux Mint osv.) Og "Udviklingsværktøjer" på Red Hat og CentOS.

Sådan installeres dette på Debian-baserede systemer:

apt-get install build-essential

Sådan installeres dette på CentOS og Red Hat-kørsel:

yum groupinstall "Udviklingsværktøjer"

Kom godt i gang med Makefile

Lad os komme i gang med at skrive en Hej Verden program med programmeringssprog C.

Hovedfunktionen i vores C-program ligger indeni helvedes hoved.c. Indholdet af filen skal se sådan ud:

#omfatte  int main () my_fun (); returnere 0;  

Denne kode inkluderer headerfilen hellofun.h, der indeholder erklæringen om en funktion kaldet hello_fun (). Indholdet af hellofun.h er:

ugyldig min_funktion ();

Definitionen af ​​my_fun () lever inde i hellofun.c:

#omfatte  #omfatte  ugyldig my_fun () printf ("Hello World!\ n "); returner;

Dette er et meget simpelt program, og vi kunne kompilere det med gcc med kun en kommandolinje. Men virkelige livsprogrammer er ikke så enkle og så små som dette. Ting bliver komplekse virkelig snart.  Nedenfor skal jeg skrive det nødvendige makefile-script til kompilering af dette hej verdensprogram. Jeg vil forklare forskellige dele af det i de efterfølgende afsnit.

hellomain: hellomain.c hellofun.c gcc -o hej helvede.c helvede.c-jeg.

Gem denne kode i en fil kaldet makefile (uden filtypenavn). Sæt filen i det bibliotek, hvor C-filerne er. Peg din kommandolinje i denne mappe. Skriv make på kommandolinjen og tryk på enter. En eksekverbar fil kaldet hej genereres i den aktuelle mappe. Du kan bekræfte resultatet ved at køre den eksekverbare med følgende kommando.

./Hej

Udgange:

Hej Verden!

Regler, mål og afhængigheder

Et makefile-script er en samling af regler. Reglerne instruerer Make, hvordan man bygger et mål eller output fra kilde eller andre filer. Reglen specificerer også afhængigheder af målet. Afhængighedsreglerne skal udføres først afhængigt af om det allerede er behandlet ved at se på tidsstemplerne. I vores eksempel makefile ovenfor har vi en regel med navnet navngivet helvedes hoved og dens afhængigheder. Målnavnet er adskilt af et kolon fra afhængighedslisten. De shell-kommandoer, der udføres, vises i den følgende linje. Skalkommandoer skal starte med et tabulatortegn.

Hvis du ikke angiver nogen parameter med kommandoen make, udføres det første mål. I vores eksempel specificerede vi ikke nogen parameter, og vi havde helvedes hoved som det første og eneste mål.

Variabler

Variable er en fantastisk måde at skrive værdi en gang på og bruge dem adskillige gange uden at gentage værdien igen og igen. Det hjælper os med at holde vores kode TØR (gentag ikke dig selv). Hvis du nogensinde har brug for at ændre en værdi overalt i scriptet, skal du bare ændre det ét sted for at afspejle ændringen overalt, hvis du bruger variabel.

I vores eksempel brugte vi gcc som kompilatoren, men vi skal muligvis ændre compileren til noget andet. Så vi kan holde kompilatorens navn i en variabel. Vi kan også holde kompilatorflagene i en anden variabel for at genbruge det. For at indstille en værdi til en variabel bruger vi lige tegn (=) og for at læse den variabel bruger vi $ (variabel_navn).

CC = gcc CFLAGS = -I. hellomain: hellomain.c hellofun.c $ (CC) -o hej helvede.c helvede.c $ (CFLAGS)

Rengøring af miljøet

Vi har ofte brug for at rense vores miljø. Hvis vi ønsker, at hvert stykke af vores projekt skal genopbygges fra bunden, er vi nødt til at rense det. I vores enkle eksempel er den eneste fil, der genereres, den Hej eksekverbar. Uden at slette det manuelt kan vi slette det med mærke. Så vi kan oprette en regel for det og navngive målet som ren.

CC = gcc CFLAGS = -I. hellomain: hellomain.c hellofun.c $ (CC) -o hej helvede.c helvede.c $ (CFLAGS) ren: rm hej

Shell-kommandoen i det rene mål er bare den ældgamle shell-kommando rm. Udfør nu fra kommandolinjen:

gøre rent

Se på den aktuelle mappe for at se, at Hej eksekverbar fil er væk.

Udvidelse af vores eksempel for at løse flere problemer

I vores enkle eksempler på Hello World Compilation har vi et problem, som vi endnu ikke har løst. helvedes hoved målet ser på hellomian.c og helvede.c filernes tidsstempler, næste gang du prøver at kompilere det igen lave eller lav helvede. Så hvis du ændrer nogen af ​​disse to filer, kompileres de igen. Men hvis du ændrer dig hellofun.h så kompileres det ikke igen. Det er uventet!

Igen har vi sprunget over et mellemniveau. Vi genererede ikke objektfilerne og genererede direkte den eksekverbare. Men bag scenen oprettes objektfilerne i en midlertidig mappe og slettes. Vi vil generere objektfiler, før vi bygger den eksekverbare fil. Denne gang navngiver vi hovedmålet som alle

alle: helvede.o helvede.o gcc helvede.o helvede.o -o hej helvede.o: helvede.c hellofun.h gcc -I. -c helvede.c hellofun.o: hellofun.c hellofun.h gcc -I. -c hellofun.c ren: rm -rf *.o rm hej

Kør make-kommandoen igen for at se, om dit program bygger med succes eller ej. Kør hej eksekverbar for at bekræfte resultatet. Se på den aktuelle mappe, og du vil se, at der oprettes objektsfiler. Vi har tilføjet endnu en linje til det rene mål for at rydde op på objektfiler. Dette makefile-script hjælper med at kompilere Hello World-programmet, selvom hellofun.h filen er ændret.

Konklusion

Make er et af de mest vigtige værktøjer til linux-brugere og programmører. Hvis du er en slutbruger, vil viden om mærke hjælpe dig med at løse mange ødelagte ting i din verden af ​​linux. Hvis du er programmør, kan du bare ikke gå væk ved at skrive koden og lade dine brugere finde ud af, hvordan de kompilerer kildekoden til eksekverbare filer. Du skal oprette et makefile-script til slutbrugerne, så de ikke spiller noget gættespil for at kompilere din kilde til eksekverbare filer.

Referencer

GNUMake-projektets hjemmeside
GNU Lav dokumentation

Installer nyeste Dolphin Emulator til Gamecube & Wii på Linux
Dolphin Emulator giver dig mulighed for at spille dine valgte Gamecube & Wii-spil på Linux Personal Computers (PC). Som en frit tilgængelig og open s...
Sådan bruges GameConqueror Cheat Engine i Linux
Artiklen dækker en vejledning om brug af GameConqueror-snydemotoren i Linux. Mange brugere, der spiller spil på Windows, bruger ofte "Cheat Engine" -a...
Bedste spilkonsolemulatorer til Linux
Denne artikel viser en liste over populære spilkonsolemuleringssoftware, der er tilgængelig til Linux. Emulation er et softwarekompatibilitetslag, der...