GNU Make

GNU Make Tutorial

GNU Make Tutorial

GNU Make är ett verktyg som hjälper till att generera körbara program från källkoden och även bearbeta andra icke-källfiler från projektet. Make får logiken att bygga körbara filer och bearbeta andra icke-källfiler från en fil som kallas a makefile eller a Makefile.

Varför göra?

Installerar Make

Att göra ensam räcker inte för att bygga program. För att bygga program från källan måste du ha kompilatorer och andra verktyg installerade på ditt system. Så vi behöver hela uppsättningen utvecklingsverktyg för vårt syfte.

För att sammanställa källor på Linux finns det ett paket som kallas ”build-essential” på Debian-baserade system (t.ex.g. Ubuntu, Linux Mint, etc) och "Utvecklingsverktyg" på Red Hat och CentOS.

För att installera detta på Debian-baserade system:

apt-get install build-essential

För att installera detta på CentOS och Red Hat-körning:

yum gruppinstallera "Utvecklingsverktyg"

Komma igång med Makefile

Låt oss komma igång genom att skriva a Hej världen program med C-programmeringsspråk.

Huvudfunktionen för vårt C-program kommer att ligga inom helvete.c. Innehållet i filen ska se ut så här:

#omfatta  int main () my_fun (); returnera 0;  

Den här koden innehåller rubrikfilen hellofun.h som innehåller deklarationen för en funktion som heter hello_fun (). Innehållet i hellofun.h är:

ogiltig my_fun ();

Definitionen av my_fun () bor i hellofun.c:

#omfatta  #omfatta  ogiltig my_fun () printf ("Hello World!\ n "); return;

Detta är ett mycket enkelt program och vi kan kompilera det med gcc med bara en kommandorad. Men verkliga program är inte så enkla och så små som detta. Saker blir komplexa snart.  Nedan ska jag skriva det nödvändiga makefile-skriptet för att sammanställa detta hejvärldsprogram. Jag kommer att förklara olika delar av det i efterföljande avsnitt.

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

Förvara den här koden i en fil som heter makefile (utan något filtillägg). Lägg filen i katalogen där C-filerna finns. Rikta din kommandorad i den här katalogen. Skriv make på kommandoraden och tryck på enter. En körbar fil som heter Hello skapas i den aktuella katalogen. Du kan verifiera resultatet genom att köra den körbara med följande kommando.

./Hej

Utgångar:

Hej världen!

Regler, mål och beroende

Ett makefile-skript är en samling regler. Reglerna instruerar Make hur man bygger ett mål eller en output från källan eller andra filer. Regeln anger också beroenden för målet. Beroendets regler måste utföras först beroende på om det redan har bearbetats genom att titta på tidsstämplarna. I vårt exempel makefile ovan har vi en regel med mål som heter helvete och dess beroende. Målnamnet separeras av ett kolon från beroendelistan. Skalkommandon som kommer att köras listas i följande rad. Skalkommandona måste börja med ett tabbtecken.

Om du inte anger någon parameter med kommandot make körs det första målet. I vårt exempel specificerade vi ingen parameter och det hade vi helvete som det första och enda målet.

Variabler

Variabla är bra sätt att skriva värde en gång och använda dem flera gånger utan att upprepa värdet om och om igen. Det hjälper oss att hålla vår kod TORR (upprepa inte dig själv). Om du någonsin behöver ändra något värde över hela skriptet, behöver du bara ändra det på ett ställe för att återspegla förändringen överallt om du använder variabel.

I vårt exempel använde vi gcc som kompilatorn, men vi kan behöva ändra kompilatorn till något annat. Så vi kan behålla kompilatorns namn i en variabel. Vi kan också hålla kompilatorflaggorna i en annan variabel för att återanvända det. För att ställa in ett värde på en variabel använder vi lika tecken (=) och för att läsa den variabeln använder vi $ (variabel_namn).

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

Rengöring av miljön

Vi kan ofta behöva rengöra vår miljö. Om vi ​​vill att varje del av vårt projekt ska byggas om från grunden måste vi rengöra det. I vårt enkla exempel är den enda filen som genereras Hej körbar. Utan att radera det manuellt kan vi ta bort det med make. Så vi kan skapa en regel för det och namnge målet som rena.

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

Skalkommandot i det rena målet är bara det gamla skalkommandot rm. Kör nu från kommandoraden:

gör rent

Titta på den aktuella katalogen för att se att Hej körbar fil är borta.

Utöka vårt exempel för att lösa fler problem

I vårt enkla sammanställningsexempel med hejvärld har vi ett problem som vi inte har löst än. helvete målet ser på hellomian.c och hellofun.c filernas tidsstämplar nästa gång du försöker kompilera den igen göra eller gör helvete. Så om du ändrar någon av dessa två filer kommer de att kompileras om. Men om du ändrar dig hellofun.h då kommer det inte att kompileras om. Det är oväntat!

Återigen har vi hoppat över en mellannivå. Vi genererade inte objektfilerna och genererade direkt den körbara filen. Men bakom scenen skapas objektfilerna i en tillfällig katalog och tas bort. Vi vill generera objektfilerna innan vi bygger den körbara filen. Den här gången heter vi huvudmålet som Allt

alla: helvete.o helvete.o gcc helvete.o helvete.o-o hej 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 hej

Kör kommandot make igen för att se om ditt program bygger framgångsrikt eller inte. Kör hej körbar för att verifiera resultatet. Titta på den aktuella katalogen så ser du att objektfiler skapas. Vi har lagt till en rad till det rena målet för att rensa objektfiler. Detta makefile-skript hjälper till att kompilera om Hello-världsprogrammet även om hellofun.h filen ändras.

Slutsats

Make är ett av de viktigaste verktygen för Linux-användare och programmerare. Om du är slutanvändare kan kunskap om märke hjälpa dig att fixa många trasiga saker i din Linux-värld. Om du är programmerare kan du bara inte gå bort genom att skriva koden och låta dina användare ta reda på hur man sammanställer källkoden till körbara filer. Du måste skapa ett makefilskript för slutanvändarna så att de inte spelar något gissningsspel för att kompilera din källa till körbara filer.

Referenser

GNUMake-projektets hemsida
GNU Gör dokumentation

Så här installerar du League Of Legends på Ubuntu 14.04
Om du gillar League of Legends är det här en möjlighet för dig att testa League of Legends. Observera att LOL stöds på PlayOnLinux om du är en Linux-a...
Installera det senaste OpenRA-strategispelet på Ubuntu Linux
OpenRA är en Libre / Free Real Time Strategy-spelmotor som återskapar de tidiga Westwood-spelen som det klassiska Command & Conquer: Red Alert. Distri...
Installera senaste Dolphin Emulator för Gamecube & Wii på Linux
Dolphin Emulator låter dig spela dina valda Gamecube & Wii-spel på Linux Personal Computers (PC). Eftersom Dolphin Emulator är en fritt tillgänglig o...