Skip to content

Het Unix- en Linux-commando begrijpen: make

23 de juni de 2021
GettyImages 468834165 57ed8d935f9b586c353b9d75

Het make-hulpprogramma bepaalt automatisch welke delen van een groot programma opnieuw moeten worden gecompileerd en geeft de opdrachten om ze opnieuw te compileren. De handleiding beschrijft de GNU-implementatie van make, die is geschreven door Richard Stallman en Roland McGrath. Het make-hulpprogramma is niet beperkt tot programma’s. U kunt het gebruiken om elke taak te beschrijven waarbij sommige bestanden automatisch van andere moeten worden bijgewerkt wanneer de andere veranderen. Het make-commando wordt het meest gebruikt in een algemeen proces om software te bouwen op basis van de broncode.

Hoe het Make-commando in Linux te gebruiken

Dit is een veelvoorkomend voorbeeld van het gebruik van het make-commando op Linux. Meestal maakt het deel uit van een eenvoudig proces in drie stappen om open-source apps te bouwen op basis van hun broncode. Deze voorbeelden tonen C-programma’s omdat deze het meest voorkomen, maar je kunt make gebruiken met elke programmeertaal die de compiler kan uitvoeren met een shell-opdracht.

  1. Installeer Git, als je het niet hebt, samen met de tools voor het bouwen van software. apt install git build-essential

  2. Kies een app om mee te werken of download VLC. apt build-dep vlc

  3. Kloon de VLC-broncode. git kloon https://github.com/videolan/vlc.git

  4. Wijzig mappen in de gekloonde VLC-broncode en voer het configuratiescript uit. cd vlc
    ./bootstrap
    ./configureren

  5. Voer de … uit maken commando samen met de -j vlag, gevolgd door het aantal CPU-cores/threads dat uw systeem heeft. maak -j4

  6. Dat zal enige tijd duren om te voltooien. Als het klaar is, installeer je de app met laten installeren. sudo make install

  7. Je bent klaar.

Vaker wel dan niet, is dit hoe je het make-commando gebruikt zult zien. Er kunnen complexere procedures zijn of kleine variaties, maar het is nooit te ingewikkeld.

Hoe werkt de GNU-opdracht?

Het onderstaande gedeelte is een technische uitsplitsing van het make-commando. Als u het maximale uit uw merk wilt halen, raadpleeg dan de onderstaande opties. Deze pagina is een uittreksel van de documentatie van GNU make. Het wordt slechts af en toe bijgewerkt omdat het GNU-project nroff niet gebruikt. Raadpleeg het infobestand voor volledige, actuele documentatie maak.info die is gemaakt van het Texinfo-bronbestand maak.texinfo.

Syntaxis en voorbereiding van het make-hulpprogramma

De syntaxis van het make-hulpprogramma is maken -f makefile ] [ option ] … doelwit … Om het gebruik van make voor te bereiden, moet u een bestand schrijven met de naam makefile die de relaties tussen bestanden in uw programma beschrijft en de opdrachten voor het bijwerken van elk bestand vermeldt. Gewoonlijk wordt een uitvoerbaar bestand bijgewerkt vanuit objectbestanden, die op hun beurt worden gemaakt door bronbestanden te compileren. Als er eenmaal een geschikt makefile bestaat, wordt elke keer dat u enkele bronbestanden wijzigt, het shell-commando maken volstaat om alle noodzakelijke hercompilaties uit te voeren. Het make-programma gebruikt de makefile-database en de laatste-modificatietijden van de bestanden om te beslissen welke bestanden moeten worden bijgewerkt. Voor elk van die bestanden geeft het de opdrachten die in de database zijn vastgelegd. Het make-hulpprogramma voert opdrachten in de makefile uit om een ​​of meer doelnamen bij te werken, waarbij: naam is typisch een programma. Als Nee -f optie is aanwezig, zoek naar de makefiles GNUmakefile, makefile, en Makefile, in die volgorde. Normaal gesproken zou je de makefile ook moeten aanroepen: makefile of Makefile. (Het wordt aanbevolen om Makefile te gebruiken omdat het prominent aan het begin van een directorylijst verschijnt, in de buurt van andere belangrijke bestanden zoals README.) De eerst aangevinkte naam, GNUmakefile, wordt niet aanbevolen voor de meeste makefiles. Gebruik deze naam alleen als een makefile specifiek is voor GNU make en niet wordt begrepen door andere versies van make. Als makefile is , wordt de standaardinvoer gelezen. De maken utility werkt een doel bij als dit afhankelijk is van vereiste bestanden die zijn gewijzigd sinds het doel voor het laatst is gewijzigd, of als het doel niet bestaat.

Opties voor het hulpprogramma Maken

De -b en -m opties worden genegeerd voor compatibiliteit met andere versies van make.

-C dir wijzigingen in de map dir voordat u de makefiles leest of iets anders doet. Indien meerdere -C opties zijn gespecificeerd, elk wordt geïnterpreteerd ten opzichte van de vorige: -C / -C enz is gelijk aan -C /etc. Dit wordt meestal gebruikt met recursieve aanroepen van make. De -d optie drukt foutopsporingsinformatie af naast de normale verwerking. De foutopsporingsinformatie zegt welke bestanden in aanmerking komen voor remake, welke bestandstijden worden vergeleken en met welke resultaten, welke bestanden opnieuw moeten worden gemaakt en welke impliciete regels worden overwogen en welke worden toegepast. De -e optie geeft variabelen uit de omgeving voorrang op variabelen uit makefiles. De -f het dossier optie gebruikt het dossier als een make-bestand. De -ik optie negeert alle fouten in opdrachten die worden uitgevoerd om bestanden opnieuw te maken. De -IK dir optie specificeert een map dir om te zoeken naar opgenomen makefiles. Als meerdere –ik opties worden gebruikt om meerdere mappen te specificeren, de mappen worden doorzocht in de opgegeven volgorde. In tegenstelling tot de argumenten voor andere vlaggen van make, mappen met -IK vlaggen kunnen direct na de vlag komen: -Idir is toegestaan, evenals -Ik dir. Deze syntaxis is toegestaan ​​voor compatibiliteit met de C-preprocessor -IK vlag. De -j banen optie specificeert het aantal taken (commando’s) dat tegelijkertijd moet worden uitgevoerd. Als er meer dan één is -j optie, de laatste is effectief. Als de -j optie wordt gegeven zonder een argument, make beperkt het aantal taken dat tegelijkertijd wordt uitgevoerd niet. De -k optie gaat zoveel mogelijk door na een fout. Het doelwit dat faalde en degenen die ervan afhankelijk zijn, kunnen niet opnieuw worden gemaakt. De andere afhankelijkheden van deze doelen kunnen echter allemaal op dezelfde manier worden verwerkt. De -l en -l laad opties specificeren dat er geen nieuwe jobs (commando’s) gestart mogen worden als er andere jobs actief zijn, en het belastingsgemiddelde is minstens laden (een getal met drijvende komma). Zonder argument verwijdert het een eerdere laadlimiet. De -n optie drukt de opdrachten af ​​die zouden worden uitgevoerd, maar voert ze niet uit. De -O het dossier optie maakt de niet opnieuw het dossier zelfs als het ouder is dan zijn afhankelijkheden en niets opnieuw maakt vanwege wijzigingen in het dossier. In wezen wordt het bestand als oud behandeld en worden de regels genegeerd. De -p optie drukt de database (regels en variabele waarden) af die het resultaat zijn van het lezen van de makefiles. Het wordt dan uitgevoerd zoals gebruikelijk of zoals anders aangegeven. Hiermee wordt ook de versie-informatie afgedrukt die wordt gegeven door de -v schakelaar (zie hieronder). Om de database af te drukken zonder te proberen bestanden opnieuw te maken, gebruik, maken -p -f/dev/null.

De -q optie stelt de vraagmodus in. Het voert geen opdrachten uit en drukt niets af. Het retourneert een exit-status die nul is als de opgegeven doelen up-to-date zijn, anders niet nul. De -r optie elimineert het gebruik van de ingebouwde impliciete regels. Het wist ook de standaardlijst met achtervoegsels voor achtervoegselregels. De -s optie dempt de bewerking. Het drukt de opdrachten niet af wanneer ze worden uitgevoerd. De -S optie annuleert het effect van de -k keuze. Dit is niet nodig, behalve in een recursieve make waar -k kan worden overgenomen van het merk op het hoogste niveau via MAKEFLAGS of als u instelt you -k in MAKEFLAGS in uw omgeving. De -t optie raakt bestanden aan (markeert ze up-to-date zonder ze te wijzigen) in plaats van hun commando’s uit te voeren. Dit wordt gebruikt om te doen alsof de commando’s zijn uitgevoerd, om toekomstige aanroepingen van make voor de gek te houden. De -v option drukt de versie van het make-programma af plus een copyright, een lijst met auteurs en een melding dat er geen garantie is. De -w optie drukt een bericht af met de werkdirectory voor en na andere verwerking. Dit kan handig zijn voor het vinden van fouten uit gecompliceerde nesten van recursieve make commando’s. De -W het dossier optie doet alsof het doel het dossier is veranderd. Bij gebruik met de -n vlag, dit laat u zien wat er zou gebeuren als u dat bestand zou wijzigen. Zonder -n, het is bijna hetzelfde als rennen aanraken commando op het gegeven bestand voordat make wordt uitgevoerd, behalve dat de wijzigingstijd alleen wordt gewijzigd in de verbeelding van make.