GNU-merk

GNU Make-zelfstudie

GNU Make-zelfstudie

GNU Make is een tool die helpt om uitvoerbare programma's uit de broncode te genereren en ook andere niet-bronbestanden van het project te verwerken. Make krijgt de logica van het bouwen van de uitvoerbare bestanden en het verwerken van andere niet-bronbestanden uit een bestand met de naam a makefile of een Makefile.

Waarom maken??

Merk installeren

Maken alleen is niet genoeg om programma's te bouwen. Om programma's vanaf de broncode te bouwen, moeten compilers en andere hulpmiddelen op uw systeem zijn geïnstalleerd. We hebben dus de volledige reeks ontwikkelingstools nodig voor ons doel.

Om bronnen op Linux te compileren, is er een pakket genaamd "build-essential" op op Debian gebaseerde systemen (e.g. Ubuntu, Linux Mint, enz.) en "Development Tools" op Red Hat en CentOS.

Om dit te installeren op op Debian gebaseerde systemen:

apt-get install build-essentieel

Om dit te installeren op CentOS en Red Hat run:

yum groupinstall "Ontwikkeltools"

Aan de slag met Makefile

Laten we beginnen door te schrijven a Hallo Wereld programma met de programmeertaal C.

De belangrijkste functie van ons C-programma bevindt zich binnenin hallomain.c. De inhoud van het bestand moet er als volgt uitzien:

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

Deze code bevat het headerbestand hellofun.h die de verklaring bevat van een functie genaamd hello_fun(). De inhoud van hellofun.h is:

ongeldig my_fun();

De definitie van my_fun() leeft in hellofun.c:

#include  #include  void my_fun()  printf("Hallo wereld!\n"); terug; 

Dit is een heel eenvoudig programma en we zouden het kunnen compileren met gcc met slechts één commandoregel. Maar echte programma's zijn niet zo eenvoudig en zo klein als dit. Dingen worden heel snel complex.  Hieronder ga ik het benodigde makefile-script schrijven voor het compileren van dit hello world-programma. Ik zal verschillende delen ervan in volgende paragrafen uitleggen.

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

Bewaar deze code in een bestand met de naam makefile (zonder enige bestandsextensie). Zet het bestand in de map waar de C-bestanden staan. Richt uw opdrachtregel in deze map. Schrijf make op de opdrachtregel en druk op enter. Er wordt een uitvoerbaar bestand met de naam hallo gegenereerd in de huidige map. U kunt het resultaat verifiëren door het uitvoerbare bestand uit te voeren met de volgende opdracht:.

./Hallo

Uitgangen:

Hallo Wereld!

Regels, doelen en afhankelijkheden

Een makefile-script is een verzameling regels. De regels instrueren Make hoe een doel of uitvoer van bronbestanden of andere bestanden te bouwen. De regel specificeert ook afhankelijkheden van het doel. De afhankelijkheidsregels moeten eerst worden uitgevoerd, afhankelijk van of dat al is verwerkt door naar de tijdstempels te kijken. In ons voorbeeld makefile hierboven hebben we een regel met de naam hallomain en zijn afhankelijkheden. De doelnaam wordt gescheiden door een dubbele punt uit de afhankelijkheidslijst. De shell-commando's die worden uitgevoerd, staan ​​in de volgende regel:. De shell-opdrachten moeten beginnen met een tab-teken.

Als u geen parameter opgeeft met het make-commando, wordt het eerste doel uitgevoerd. In ons voorbeeld hebben we geen enkele parameter gespecificeerd en we hadden hallomain als het eerste en enige doelwit.

Variabelen

Variabelen zijn een geweldige manier om waarde één keer te schrijven en meerdere keren te gebruiken zonder de waarde keer op keer te herhalen. Het helpt ons onze code DROOG te houden (Do Not Repeat Yourself). Als u ooit een waarde in het hele script moet wijzigen, hoeft u dat alleen maar op één plaats te wijzigen om de verandering overal weer te geven als u variabele gebruikt.

In ons voorbeeld gebruikten we gcc als de compiler, maar het kan zijn dat we de compiler moeten wijzigen in iets anders. Dus we kunnen de compilernaam in een variabele houden. We kunnen de compilervlaggen ook in een andere variabele houden om die opnieuw te gebruiken. Voor het instellen van een waarde aan een variabele gebruiken we het gelijkteken (=) en om die variabele te lezen gebruiken we $(variable_name).

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

Het milieu schoonmaken

Het kan zijn dat we onze omgeving vaak moeten schoonmaken. Als we willen dat elk onderdeel van ons project helemaal opnieuw wordt opgebouwd, moeten we het schoonmaken. In ons eenvoudige voorbeeld is het enige bestand dat wordt gegenereerd de Hallo uitvoerbaar. Zonder dat handmatig te verwijderen, kunnen we dat verwijderen met make. Dus we kunnen daar een regel voor maken en het doel een naam geven als schoon.

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

Het shell-commando in het schone doel is gewoon het eeuwenoude shell-commando rm. Voer nu vanaf de opdrachtregel uit:

schoon maken

Kijk naar de huidige map om te zien dat de Hallo uitvoerbaar bestand is verdwenen.

Ons voorbeeld uitbreiden om meer problemen op te lossen

In ons eenvoudige Hello World-compilatievoorbeeld hebben we een probleem dat we nog niet hebben opgelost. hallomain doel kijkt naar hellomian.c en hellofun.c tijdstempels van bestanden de volgende keer dat u het opnieuw probeert te compileren met maken of hallomain maken. Dus als je een van die twee bestanden wijzigt, worden ze opnieuw gecompileerd. Maar als je verandert? hellofun.h dan zal het niet opnieuw compileren. Dat is onverwacht!

Nogmaals, we hebben een gemiddeld niveau overgeslagen. We hebben de objectbestanden niet gegenereerd en het uitvoerbare bestand rechtstreeks gegenereerd. Maar achter de schermen worden de objectbestanden in een tijdelijke map gemaakt en verwijderd. We willen de objectbestanden genereren voordat we het uitvoerbare bestand bouwen. Deze keer noemen we het hoofddoel als alle

allemaal: hallomain.oh hellofun.o gcc hallomain.oh hellofun.o -o hallo hallomain.o: hallomain.c hellofun.h gcc -I. -c hallomain.c hellofun.o: hellofun.c hellofun.h gcc -I. -c hellofun.c schoon: rm -rf *.o rm hallo

Voer de make-opdracht opnieuw uit om te zien of uw programma succesvol is gebouwd of niet. Voer het uitvoerbare bestand hallo uit om het resultaat te verifiëren. Kijk naar de huidige map en je zult zien dat er objectbestanden worden gemaakt. We hebben nog een regel toegevoegd aan het schone doel om objectbestanden op te schonen. Dit makefile-script helpt bij het opnieuw compileren van het hello world-programma, zelfs als de hellofun.h bestand is gewijzigd.

Conclusie

Make is een van de meest essentiële tools voor linux-gebruikers en programmeurs. Als je een eindgebruiker bent, zal kennis van make je helpen veel kapotte dingen in je wereld van linux te repareren. Als je een programmeur bent, kun je gewoon niet weglopen door de code te schrijven en je gebruikers laten uitzoeken hoe ze die broncode kunnen compileren naar uitvoerbare bestanden. U moet een makefile-script maken voor de eindgebruikers, zodat ze geen raadspelletjes spelen om uw bron te compileren naar uitvoerbare bestanden.

Referenties

GNUMaak Project-startpagina
GNU Make-documentatie

Top 5 Game Capture-kaarten
We hebben allemaal gezien en genoten van streaming gameplays op YouTube. PewDiePie, Jakesepticye en Markiplier zijn slechts enkele van de beste gamers...
Hoe een spel op Linux te ontwikkelen
Tien jaar geleden zouden niet veel Linux-gebruikers voorspellen dat hun favoriete besturingssysteem ooit een populair spelplatform voor commerciële vi...
Open source-poorten van commerciële game-engines
Gratis, open source en platformonafhankelijke game-engine-recreaties kunnen worden gebruikt om zowel oude als enkele van de vrij recente gametitels te...