Lave

Den aktuelle version af siden er endnu ikke blevet gennemgået af erfarne bidragydere og kan afvige væsentligt fra den version , der blev gennemgået den 11. januar 2016; checks kræver 35 redigeringer .

Lave
Sprog klasse byg automatiseringsværktøj [d] , UNIX-værktøj [d] ,scriptsprog,programmeringssprogog indrykket sprog [d]
Dukkede op i april 1976  ( 1976-04 )
Forfatter Stuart Feldman
Dialekter BSD-fabrikat, GNU-fabrikat, Microsoft nmake
påvirket Ant , Rake , MSBuild og andre
OS Unix-agtig

make  ( IPA [ me ɪ k ] ; fra  engelsk  -  "make", "make") er et værktøj , der automatiserer processen med at konvertere filer fra en form til en anden. Oftest er dette at kompilere kildekode til objektfiler og derefter linke dem til eksekverbare filer eller biblioteker .

Værktøjet bruger specielle make - filer, der specificerer filernes afhængighed af hinanden og reglerne for at opfylde dem. Baseret på oplysningerne om den sidste ændringstid for hver fil, bestemmer og kører make de nødvendige programmer.

Oprindelse

Før oprettelsen af ​​make build-systemet (kompilering) bestod Unix -software normalt af shell - build - scripts , der ledsagede programmernes kildekode.

make blev skabt af Stuart Feldman i april 1976Bell Labs .

Der er i øjeblikket mange hjælpeprogrammer til at spore afhængigheder, men make  er en af ​​de mest brugte, primært på grund af det faktum, at den er inkluderet i Unix , startende med PWB/UNIX-versionen (Eng. Programmer's Workbench ), som indeholdt værktøjer til at udvikle software sikkerhed .

Moderne versioner

Der er flere versioner af make , baseret på det originale mærke eller skrevet fra bunden, der bruger de samme filformater og grundlæggende principper og algoritmer, samt nogle forbedringer og udvidelser. For eksempel:

POSIX inkluderer en standard for de grundlæggende funktioner i mærke , implementeret med varierende grader af kompatibilitet i forskellige versioner af mærke . Generelt kan simple make-filer behandles med succes af forskellige versioner af make .

Brug

lav [ -f makefil ] [ mål ] ...

Filen søges i den aktuelle mappe. Hvis -f-switchen ikke er angivet, bruges standardmakefilnavnet, Makefile , (dog kan forskellige implementeringer af make kontrollere andre filer ud over dette, såsom GNUmakefile ).

make åbner make-filen, læser reglerne og udfører de nødvendige kommandoer for at bygge det angivne mål .

Standardmål for opbygning af GNU- distributioner :

  • alle - byg pakken;
  • installer - installer en pakke fra distributionen (kopierer eksekverbare filer, biblioteker og dokumentation til systemmapper);
  • afinstaller - fjern pakken (sletter eksekverbare filer og biblioteker fra systemmapper);
  • clean - ryd op i distributionen (fjern fra distributionen objektet og de eksekverbare filer, der blev oprettet under kompileringsprocessen);
  • distclean — ryd op i alle filer, der er oprettet under kompilering, og alle hjælpefiler, der er oprettet af ./configure-værktøjet under processen med at konfigurere distributionens kompileringsmuligheder.

Som standard bruger make det allerførste mål i makefilen.

BSD-applikationsopbygningsprocessen bruger ofte:

  • depend - kompiler / byg afhængigheder.

Makefile

Make - programmet udfører kommandoer i henhold til reglerne specificeret i en speciel fil. Denne fil kaldes en makefile. Typisk beskriver en makefil, hvordan man kompilerer og linker et program.

makefile består af regler og variabler. Regler har følgende syntaks:

mål1 mål2 ... : prop1 prop2 ... hold 1 hold 2 ...

Reglen er et sæt kommandoer , hvis udførelse vil føre til samling af målfiler fra attributfiler .

Reglen fortæller make , at filerne produceret af kommandoerne ( targets ) er afhængige af de tilsvarende prop-filer. make kontrollerer eller bruger ikke indholdet af prop-filerne på nogen måde, men at specificere listen over prop-filer er kun påkrævet for make for at sikre, at filerne er til stede, før det begynder at udføre kommandoer, og for at holde styr på filafhængigheder.

Typisk er målet navnet på den fil, der genereres som et resultat af de angivne kommandoer. Målet kan også være navnet på en handling, der vil blive udført som et resultat af udførelse af kommandoer (f.eks. fjerner det rene mål i makefiler til kompilering af programmer normalt alle filer, der er oprettet under kompileringsprocessen ).

Kommandolinjer skal begynde med et tabulatortegn .

Overvej et simpelt C-program. Lad programprogrammet bestå af et par kodefiler - main.c og lib.c, samt en header-fil  - defines.h, som er inkluderet i begge kodefiler . Derfor, for at oprette et program, er det nødvendigt at oprette objektfiler main.o og lib.o fra par (main.c defines.h) og (lib.c defines.h), og derefter linke dem til program. Når du bygger manuelt, skal du udføre følgende kommandoer:

cc -c main.c cc -c lib.c cc -o program main.o lib.o

Hvis der foretages ændringer i defines.h-filen under udviklingen af ​​programmet, vil rekompilering af både filer og linkning være påkrævet , og hvis vi ændrer lib.c, så kan rekompilering af main.c udelades.

For hver fil, vi skal have under kompileringsprocessen , skal vi således specificere på grundlag af hvilke filer og med hvilken kommando den er oprettet. Make - programmet gør følgende baseret på disse oplysninger:

  • indsamler fra disse oplysninger den korrekte rækkefølge af kommandoer for at opnå de nødvendige resulterende filer;
  • og starter kun oprettelsen af ​​den nødvendige fil, hvis en sådan fil ikke findes eller er ældre end de filer, den afhænger af.

Hvis du ikke udtrykkeligt angiver et mål, når du kører make , så vil det første mål i makefilen, der ikke starter med et '.', blive behandlet.

For programprogrammet er det nok at skrive følgende makefile:

program : hoved . om lib . o cc -o program main.o lib.o main.o lib.o : definerer . h

Det er værd at bemærke en række funktioner. Navnet på det andet mål angiver to filer, og der er ikke angivet nogen kompileringskommando for det samme mål. Desuden er objektfilernes afhængighed af "*.c"-filer ikke eksplicit angivet nogen steder. Dette skyldes, at make -programmet har foruddefinerede regler for at få filer med bestemte . Så for målobjektfilen (udvidelsen ".o"), når en tilsvarende fil med filtypenavnet ".c" er fundet, vil compileren "cc -c" blive kaldt og specificerer denne ".c"-fil og alle afhængighedsfiler i parametrene.

Syntaks til at definere variable :

variabel = værdi

Værdien kan være en hvilken som helst sekvens af tegn , inklusive mellemrum og referencer til værdierne af andre variabler . Med det sagt, kan vi ændre vores makefile som følger:

OBJ = main.o lib.o program : $( OBJ ) cc -o program $( OBJ ) $(OBJ) : definerer . h

Det skal bemærkes, at beregningen af ​​værdierne af variabler kun sker på brugstidspunktet (den såkaldte dovne evaluering bruges ). Hvis du f.eks. bygger alle målet ud fra følgende makefil, udskrives strengen "Hva?".

foo = $( bar ) bar = $( ugh ) ugh = Hvad? alle : echo $( foo )

Antag, at en anden header-fil, lib.h, tilføjes til projektet og kun er inkluderet i lib.c. Så vil makefilen øges med en linje mere:

lib.o : lib . h

En målfil kan således angives til flere formål. I dette tilfælde vil den komplette liste over afhængigheder for filen blive kompileret fra listerne over afhængigheder for alle de mål, som den deltager i, filen oprettes kun én gang.

Multithreaded udførelse

For at fremskynde langvarige opgaver anvendes parallelisering af beregninger inden for make-programmet. Parallelisering udføres automatisk af make-tolken. For at køre makefilen i multitrådstilstand, skal du bestå -j <antal tråde> mulighed.

make [ -j <antal tråde> ] [ mål ]

Se også

Litteratur

Links