Lave | |
---|---|
Sprog klasse | byg automatiseringsværktøj [d] , UNIX-værktøj [d] ,scriptsprog,programmeringssprogog indrykket sprog [d] |
Dukkede op i | april 1976 |
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.
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 1976 på Bell 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 .
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 .
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 :
Som standard bruger make det allerførste mål i makefilen.
BSD-applikationsopbygningsprocessen bruger ofte:
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.oHvis 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:
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 . hDet 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ærdiVæ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 . hDet 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 . hEn 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.
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 ]Monteringsautomatiseringssystemer | |
---|---|
Unix-kommandoer | ||||||||
---|---|---|---|---|---|---|---|---|
| ||||||||
|