make
previous.png
Cursus Linux       Advanced       Compileren en Make       Make   


up.png make down.png

In dit lesonderdeel wordt de tool make besproken. Deze tool wordt vrijwel altijd gebruikt wanneer we het hebben over compileren, en programm's installeren vanaf source code. Ook bij het compileren van een eigen kernel komt de tool goed van pas.

Wat leren we in dit hoofdstuk ?

up.png 1 GNU make down.png

Met de opdracht 'make' wordt het maken van uitvoerbare en niet uitvoerbare bestanden vanaf één of meerdere source bestanden gecontroleerd.

Het programma 'make' haalt zijn kennis over hoe het een programma moet maken (compileren, linken, kopiëren, configureren, enzo... ) uit een zogenaamd 'make' bestand. Het make bestand bevat een lijst van doelen, samen met voor ieder doel, de afhankelijkheden en de opdracht(en) waarmee het doel gemaakt kan worden. De afhankelijkheden (dependencies) kunnen ieder bestand zijn dat je maar wil, typisch staan hier source bestanden. De opdracht(en) kunnen eveneens zijn wat je maar wil, zolang het doel bestand maar gemaakt wordt. Wanneer men een programma schrijft zou men altijd een 'make' bestand voor dat programma moeten schrijven, zodat bijvoorbeeld een systeem beheerder het programma kan installeren, zelfs vanaf source.
Make zorgt er dan voor dat deze systeem beheerder, totaal niets van het programma, of zijn source, of zelfs de organisatie ervan, hoeft af te weten.

De mogelijkheden van 'make':

up.png 2 Waarom 'make' gebruiken down.png

In de meeste gevallen zal men niet direct met de interne eigenschappen van make te maken hebben. Toch wordt make in de Linux omgeving zeer veel gebruikt om packages te installeren. Vooral als men packages vanaf source code wil gaan installeren zal men make moeten gebruiken. Om enig begrip hierover te bekomen volgen een aantal eenvoudige voorbeelden.
Make wordt binnen software packages gebruikt in de volgende gevallen:

up.png 3 'make' installeren down.png

Ubuntu
  1. Synaptic Package Manager
  2. Zoeken naar make
  3. Markeren voor install
  4. Installeren
SuSe SLES
  1. YaST -> Software Beheer
  2. zoeken naar make
  3. GNU make aanklikken
  4. accepteren -> doorgaan
Fedora 7

remark.png Meestal is make standaard geïnstalleerd.

up.png 4 Hoe werkt 'make' down.png

Wanneer de opdracht make op de command line gegeven wordt, gebeurd het volgende:

De volgende voorbeelden maken de relaties hierin duidelijk.

up.png 5 make gebruiken om een programma te compileren down.png

Beschouw de Makefile, getoond in de volgende screen-shot.
Deze Makefile compileert het programma 'hello2' dat bestaat uit 3 source bestanden, namelijk greetings.c, personal.c, hello2.c. De make file is als volgt ingericht :

  1. een 'target' genaamd hello2, dit doel is afhankelijk van 3 bestanden namelijk greetings.o, personal.o en hello2.o. De opdracht om het doel te maken is gcc -o greetings.o personal.o hello2.o.
  2. Een 'target' genaamd greetings.o, dewelke afhankelijk is van het source bestand greetings.c.
    De opdracht om het doel te maken is gcc -c greetings.c
  3. Een 'target' genaamd personal.o, dewelke afhankelijk is van het source bestand personal.c.
    De opdracht om het doel te maken is gcc -c personal.c
  4. Een 'target' genaamd hello2.o, dewelke afhankelijk is van het source bestand hello2.c.
    De opdracht om het doel te maken is gcc -c hello2.c

make01.png

Wanneer men de make opdracht geeft (zonder argumenten) terwijl men in de /data/project directory is, zal 'make' de Makefile inlezen en als volgt interpreteren:

  1. hello2.o ontbreekt of hello2.c is jonger dan hello2.o: hello2.o wordt gemaakt
  2. personal.o ontbreekt of personal.c is jonger dan personal.o: personal.o wordt gemaakt
  3. greetings.o ontbreekt of greetings.c is jonger dan greetings.o: greetings.o wordt gemaakt
  4. personal.o, greetings.o, en hello2.o zijn of 1 van hen is jonger dan hello2 dan wordt hello2 gemaakt.

De volgende screen-shot toont het volgende:
Wanneer men de eerste keer de opdracht 'make' geeft volgt een compilatie van alle doelen. Vervolgens wordt met de 'touch' opdracht de datum en tijd van greetings.c aangepast, dus de volgende make compileerd greetings.c, greetings.c is dus jonger dan greetings.o, en vervolgens hello2 omdat greetings.o op zijn beurt jonger is dan hello2. Dan wordt bij wijze van test hello2 verwijderd, de make die nu geactiveerd wordt compileerd dus hello2.

make02.png

up.png 6 Een install / clear voorbeeld down.png

Een goede toepassing van make is het installeren / de-installeren van software. Veronderstel dat het laatste voorbeeld uit het gcc deel, dus het aanmaken van een shared library, in een make bestand geplaatst wordt.
Bekijk de volgende screen-shot.
Maak de Makefile en test hem met, make install, en make clean

make03.png
Een voorbeeld van een volledige Makefile ten behoeve van een programma.

up.png 7 Een make voorbeeld met macro's down.png

Macro's in make files zijn strings die tijdens het uitvoeren van de makefile worden geëxpandeerd tot een andere string voor het uitvoeren van enige doel. Beschouw een herhaling van het eerste voorbeeld dat nu met behulp van een macro de lijst van .o bestanden bijhoudt.
(Dit lijkt natuurlijk heel sterk op de werking van variabelen in scripting)

make04.png

De ene macro kan in functie van de ander macro gedefinieerd worden, zoals in ROOT = /usr/local en vervolgens HEADERS = $(ROOT)/include.

Er valt nog veel meer te vertellen over make, maar ons doel is bereikt, namelijk de student enig basis inzicht geven in het werken met de opdracht 'make', dit vooral voor het behandelen van kernel configuratie en compilatie en het kunnen installeren van een package vanaf source, onderwerpen die elders in deze module besproken worden.

up.png Samenvatting down.png

In dit hoofdstuk hebben we de fundamenten van de 'make' gezien. We hebben zelf een aantal make bestanden aangemaakt, en geleerd hoe we een eigen (software) project met de make utility kunnen behandelen.

up.png Literatuur down.png



previous.png
Cursus Linux       Advanced       Compileren en Make       Make   
Last modified: Mon Jan 18 11:42:04 2016