GNU Make

GNU Make Tutorial

GNU Make Tutorial

GNU Make er et verktøy som hjelper til med å generere kjørbare programmer fra kildekoden og også behandle andre ikke-kildefiler fra prosjektet. Make får logikken til å bygge kjørbare filer og behandle andre ikke-kildefiler fra en fil som kalles a makefile eller a Makefile.

Hvorfor lage?

Installere Make

Make alone er ikke nok til å bygge programmer. For å bygge programmer fra kilden må du ha kompilatorer og andre verktøy installert på systemet ditt. Så vi trenger hele pakken med utviklingsverktøy for vårt formål.

For å kompilere kilder på Linux er det en pakke som kalles "build-essential" på Debian-baserte systemer (f.eks.g. Ubuntu, Linux Mint, etc) og "Utviklingsverktøy" på Red Hat og CentOS.

Slik installerer du dette på Debian-baserte systemer:

apt-get install build-essential

Slik installerer du dette på CentOS og Red Hat run:

yum groupinstall "Utviklingsverktøy"

Komme i gang med Makefile

La oss komme i gang med å skrive en Hei Verden program med programmeringsspråket C.

Hovedfunksjonen til C-programmet vårt ligger inne helvete.c. Innholdet i filen skal se slik ut:

#inkludere  int main () my_fun (); retur 0;  

Denne koden inkluderer overskriftsfilen hellofun.h som inneholder erklæringen om en funksjon kalt hello_fun (). Innholdet i hellofun.h er:

ugyldig min_fun ();

Definisjonen av my_fun () lever inne i hellofun.c:

#inkludere  #inkludere  ugyldig my_fun () printf ("Hello World!\ n "); return;

Dette er et veldig enkelt program, og vi kan kompilere det med gcc med bare en kommandolinje. Men virkelige programmer er ikke så enkle og så små som dette. Ting blir komplekse veldig snart.  Nedenfor skal jeg skrive det nødvendige makefile-skriptet for å kompilere dette hei-verdensprogrammet. Jeg vil forklare forskjellige deler av det i påfølgende avsnitt.

hellomain: hellomain.c hellofun.c gcc -o hallo hellomain.c helvete.c -I.

Oppbevar denne koden i en fil som heter makefile (uten filtype). Plasser filen i katalogen der C-filene er. Pek kommandolinjen i denne katalogen. Skriv lage på kommandolinjen og trykk enter. En kjørbar fil kalt hei vil bli generert i gjeldende katalog. Du kan bekrefte resultatet ved å kjøre den kjørbare filen med følgende kommando.

./Hallo

Utganger:

Hei Verden!

Regler, mål og avhengigheter

Et makefile-skript er en samling av regler. Reglene instruerer Lag hvordan du bygger et mål eller output fra kilde eller andre filer. Regelen spesifiserer også avhengigheter av målet. Avhengighetsreglene må utføres først avhengig av om det allerede er behandlet ved å se på tidsstemplene. I vårt eksempel makefile ovenfor har vi en regel med mål navngitt helvete og dens avhengigheter. Målnavnet er atskilt med et kolon fra avhengighetslisten. Skallkommandoene som skal utføres er oppført i følgende linje. Skallkommandoene må starte med et fanetegn.

Hvis du ikke angir noen parameter med kommandoen make, utføres det første målet. I vårt eksempel spesifiserte vi ingen parametere, og vi hadde helvete som det første og eneste målet.

Variabler

Variable er flott måte å skrive verdi en gang på og bruke dem flere ganger uten å gjenta verdien igjen og igjen. Det hjelper oss med å holde koden TØRR (ikke gjenta deg selv). Hvis du noen gang trenger å endre noe over hele skriptet, trenger du bare å endre det på ett sted for å gjenspeile endringen overalt hvis du bruker variabel.

I vårt eksempel brukte vi gcc som kompilatoren, men vi kan trenge å endre kompilatoren til noe annet. Så vi kan beholde kompilatornavnet i en variabel. Vi kan også beholde kompilatorflaggene i en annen variabel for å gjenbruke det. For å sette en verdi til en variabel bruker vi likhetstegn (=) og for å lese den variabelen bruker vi $ (variabelnavn).

CC = gcc CFLAGS = -I. hellomain: hellomain.c hellofun.c $ (CC) -o hallo helvete.c helvete.c $ (CFLAGS)

Rengjøring av miljøet

Vi trenger ofte å rense miljøet. Hvis vi vil at hvert stykke av prosjektet vårt skal bygges opp fra bunnen av, må vi rengjøre det. I vårt enkle eksempel er den eneste filen som genereres Hallo kjørbar. Uten å slette det manuelt, kan vi slette det med merke. Så vi kan opprette en regel for det og kalle målet som ren.

CC = gcc CFLAGS = -I. hellomain: hellomain.c hellofun.c $ (CC) -o hallo helvete.c helvete.c $ (CFLAGS) ren: rm hei

Skallkommandoen i det rene målet er bare den eldgamle skallkommandoen rm. Nå, fra kommandolinjen utfør:

gjør rent

Se på den gjeldende katalogen for å se at Hallo kjørbar fil er borte.

Utvide vårt eksempel for å løse flere problemer

I vårt enkle eksempler på Hello World Compilation har vi et problem som vi ikke har løst ennå. helvete målet ser på hellomian.c og hellofun.c filmernes tidsstempler neste gang du prøver å kompilere den med gjøre eller lage helvete. Så hvis du endrer noen av disse to filene, blir de kompilert på nytt. Men hvis du endrer deg hellofun.h da vil den ikke kompilere på nytt. Det er uventet!

Igjen har vi hoppet over et mellomnivå. Vi genererte ikke objektfilene og genererte direkte den kjørbare filen. Men bak scenen blir objektfilene opprettet i en midlertidig katalog og slettet. Vi vil generere objektfilene før vi bygger den kjørbare filen. Denne gangen kaller vi hovedmålet som alle

alt: helvete.o hellofun.o gcc hellomain.o hellofun.o -o hei helvete.o: helvete.c hellofun.h gcc -I. -c helvete.c hellofun.o: hellofun.c hellofun.h gcc -I. -c hellofun.c ren: rm -rf *.o rm hei

Kjør make-kommandoen igjen for å se om programmet ditt lykkes eller ikke. Kjør hei-kjørbar for å bekrefte resultatet. Se på den nåværende katalogen, og du vil se at objektfiler opprettes. Vi har lagt til en linje til det rene målet for å rydde opp i objektfiler. Dette makefile-skriptet hjelper til med å kompilere Hello World-programmet selv om hellofun.h filen er endret.

Konklusjon

Make er et av de viktigste verktøyene for Linux-brukere og programmerere. Hvis du er sluttbruker, vil kunnskap om merkevare hjelpe deg med å fikse mange ødelagte ting i din Linux-verden. Hvis du er programmerer, kan du bare ikke gå bort ved å skrive koden og la brukerne finne ut hvordan du kan kompilere kildekoden til kjørbare filer. Du må lage et makefile-skript for sluttbrukerne, slik at de ikke spiller noe gjetningsspill for å kompilere kilden din til kjørbare filer.

Referanser

GNUMake-prosjektets hjemmeside
GNU Lag dokumentasjon

Mus Kontroller og administrer musebevegelser mellom flere skjermer i Windows 10
Kontroller og administrer musebevegelser mellom flere skjermer i Windows 10
Dual Display Mouse Manager lar deg kontrollere og konfigurere musebevegelse mellom flere skjermer, ved å bremse bevegelsene nær grensen. Windows 10/8,...
Mus WinMouse lar deg tilpasse og forbedre musemarkørenes bevegelse på Windows PC
WinMouse lar deg tilpasse og forbedre musemarkørenes bevegelse på Windows PC
Hvis du vil forbedre standardfunksjonene til musepekeren, bruk freeware WinMouse. Det legger til flere funksjoner som hjelper deg å få mest mulig ut a...
Mus Mus venstreklikknapp fungerer ikke på Windows 10
Mus venstreklikknapp fungerer ikke på Windows 10
Hvis du bruker en dedikert mus med den bærbare eller stasjonære datamaskinen, men museklikk-knappen fungerer ikke på Windows 10/8/7 av en eller annen ...