Linux lave kommandoen bruges til at bygge og vedligeholde grupper af programmer og filer fra kildekoden. I Linux er det en af de mest brugte kommandoer af udviklerne. Det hjælper udviklere med at installere og kompilere mange hjælpeprogrammer fra terminalen. Derudover håndterer den kompileringsprocessen af de store projekter. Det sparer kompileringstiden.
Hovedmotivet for make-kommandoen er at bestemme et stort program i dele og kontrollere, om det skal omkompileres eller ej. Den udsteder også de nødvendige ordrer til at genkompilere dem.
I dette afsnit vil vi bruge C++-programmer, da C++-programmeringssproget er et objektorienteret sprog, men du kan bruge et hvilket som helst sprog, der er installeret på din maskine. Det er ikke kun begrænset til programmer; vi kan også bruge det til at beskrive andre opgaver.
Hvordan virker make-kommandoen?
Make-kommandoen tager mål som argumenter. Disse argumenter er specificeret i 'Makefile'. Makefilen indeholder målene samt tilhørende handlinger relateret til disse mål.
Når vi udfører make-kommandoen, søger den efter make-filen og scanner den for at finde målet og få adgang til dens afhængigheder. Hvis afhængigheder ikke er angivet, vil den søge efter afhængigheden og bygge den. Det vil bygge hovedmålet, efter at afhængighederne er bygget.
For eksempel, hvis vi kun ønsker at ændre én kildefil, og vi udfører kommandoen make; så dette vil kun kompilere objektfilen, der er forbundet med den kildefil. Det vil spare meget tid i den endelige kompilering af projektet.
Hvad er Makefile?
Make-kommandoen påkalder udførelsen af make-filen. Det er en speciel fil, der indeholder de shell-kommandoer, som vi opretter for at vedligeholde projektet. Makefilen indeholder mål og kommandoer til udførelse. Det er ikke tilladt at oprette mere end én make-fil. Det anbefales at oprette en separat mappe til det.
Det holder styr på de seneste filer, så opdater kun de filer, der er nødvendige. Hvis vi har et stort program med mange kildefiler, skal vi omkompilere alle de afhængige filer. Så det kan være en meget tidskrævende proces.
Makefilen har en liste over standarder. Disse standarder er nyttige for systemet til at forstå, hvilken kommando vi ønsker at udføre. Disse standarder er i to dele og adskilt af en ny linje. Den første linje er afhængighedslinjen, og de efterfølgende linjer betragtes som handlinger eller kommando s. Kommandoerne er adskilt med en fane i den nye linje.
Det afhængigheder specificer relationen mellem hver fil og kildefilerne. Og mål er en eksekverbar fil, og den oprettes efter udførelsen af make-kommandoen.
Muligheder
Make-kommandoen letter forskellige muligheder for at gøre den mere specifik. Nogle vigtige muligheder er som følger:
lav -p -f/dev/nul.
Lad os forstå nogle eksempler på kommandoen make. Vi vil se den grundlæggende brug af makefile, og yderligere vil vi oprette nogle c++ programmer og en makefile. Vi vil udføre nogle operationer på dem for bedre at forstå make-kommandoen.
hjemmeside som coomeet
Grundlæggende brug af make-kommandoen
Lad os forstå den meget grundlæggende brug af make-kommando, og det kan hjælpe dig med at forstå, hvordan det virker.
Opret et bibliotek 'projekt' og skift bibliotek til det. Overvej nedenstående kommandoer:
mkdir project cd project
Opret nu en 'Makefil' med følgende indhold til det første program:
say_hello: echo 'Hello World!'
Fra ovenstående fil er say_hello et mål, der opfører sig som en funktion i et hvilket som helst programmeringssprog, og ekko vil blive betragtet som en handling. Det skal huskes, at handling skal skrives ved at bruge en TAB. Målet og handlingen skaber sammen en regel for makefilen. Udfør nu make-kommandoen som følger:
Overvej nedenstående output:
Fra ovenstående output kan vi se selve ekkooperationen vises. Hvis vi ikke ønsker at vise ekko-kommandoen på outputtet, skal du udføre ekkoet startende med '@' symbol. For at undertrykke ekkoet skal du opdatere indholdet af makefilen som følger:
say_hello: @echo 'Hello World!'
Overvej nedenstående output:
ændre tilføje kolonne orakel
Et mål kan være en binær fil, der afhænger af handlingerne.
Lad os tilføje et par flere mål, såsom generering og liste i makefilen. Opdater makefilen som følger:
say_hello: @echo 'Hello World!' generate: @echo 'Creating files' touch file-{1..5}.txt list: @echo 'Listing files' ls
Hvis vi udfører make-kommandoen, udfører den kun det første mål, fordi det er standardmålet for makefilen. Overvej nedenstående output:
Vi kan ændre standardmålet ved at inkludere nedenstående indhold i vores makefile:
.DEFAULT_GOAL := generate
Tilføj det til den første linje i filen som følger:
Ovenstående makefil vil betragte 'generere' som standardmålet. Udfør make-kommandoen, og den vil give output som følger:
Valgmuligheden STANDARDMÅL vil kun udføre ét mål for at angive mere end ét mål for at bruge alle muligheder. For at angive mere end ét mål skal du opdatere den første linje i makefilen som følger:
all: say_hello generate
Det vil udføre det angivne mål. Overvej nedenstående output:
Der er en anden mulighed, der giver os mulighed for at udføre alle målene. Hvis vi ønsker at udføre alle målene for makefilen, skal du opdatere filen som følger:
.PHONY: all say_hello generate list say_hello: @echo 'Hello World!' generate: @echo 'Creating files' touch file-{1..5}.txt list: @echo 'Listing files' ls
Ovenstående fil udfører alle specificerede mål. Udfør make-kommandoen, overvej nedenstående output:
Avanceret brug af make-kommandoen
Lad os lave et C++-projekt med filerne main.cpp, function1.cpp, function2.cpp og en afhængighedsfil function.h.
Koden for filerne er som følger:
sove i javascript
main.cpp:
#include #include 'functions.h' int main() { print_hello(); std::cout<< std::endl; std::cout<< 'The factorial of 5 is' << factorial(5) << std:: endl; return 0; }
funktion1.cpp:
#include 'functions.h' int factorial(int n) { if(n!=1) { return (n * factorial(n-1)); } else return 1; }
funktion2.cpp:
#include #include 'functions.h' void print_hello() { std::cout << 'Hello World'; }
funktioner.h:
void print_hello(); int factorial (int n);
Opret nu en eksekverbar fil af ovenstående projekt ved at udføre nedenstående kommando:
g++ main.cpp function1.cpp function2.cpp -o hello
Ovenstående kommando vil oprette en eksekverbar fil 'Hej' af filerne main.cpp, function1.cpp og function2.cpp.
Overvej nedenstående output:
Fra ovenstående output, hvis det udføres med succes, vil det ikke give noget output.
Lad os udføre den samme opgave ved at bruge makefilen.
Opret en fil som Makefile og læg nedenstående kode i den.
all: g++ main.cpp function1.cpp function2.cpp -o hello
Nøgleordet alt bruges til mål og i newline sættes den samme kommando med en TAB som ovenfor for at specificere operationen. Gem filen. Overvej nedenstående fil:
For at betjene, udfør kommandoen som følger:
gøre script eksekverbart
make
Ovenstående kommando vil oprette en eksekverbar fil 'hej' af de angivne filer. Overvej nedenstående output:
Lad os tilføje nogle flere opgaver til Makefile. Tilføj en opgave 'udarbejde' som følger:
all: compile: g++ main.cpp function1.cpp function2.cpp -o hello
At udføre opgaven udarbejde, udfør nedenstående kommando:
make compile
Ovenstående kommando vil udføre kompileringsopgaven. Overvej nedenstående output:
Lad os udføre nogle flere opgaver til vores makefile.
opdater Makefilen som følger:
all: hello hello: main.o function1.o function2.o g++ main.o function1.o function2.o -o hello main.o: main.cpp g++ -c main.cpp function1.o: function1.cpp g++ -c function1.cpp function2.o: function2.cpp g++ -c function2.cpp clean: rm -rf *o hello
Fra ovenstående makefile har vi lavet tre objekter som main.o, function1.o og function2.o. Yderligere har vi angivet afhængighederne for målene main.o, function1.o og function2.o som henholdsvis main.cpp, function1.cpp og function2.cpp. Alle målene udfører de specificerede opgaver inden for det. Vi har også specificeret et rent mål for at rense alle afhængigheder og fjerne den eksekverbare fil.
Udfør nu make all kommandoen for at udføre vores nye makefil.
make all
Overvej nedenstående output:
Fra ovenstående output kan vi se, at kommandoen først udførte henholdsvis main.o, function1.o og function2.o. Det vil oprette den eksekverbare og objektfil for de givne filer. Det vil ikke udføre det rene mål, fordi vi ikke har specificeret det i hej. Overvej nedenstående filer:
Make-kommandoen har en ligetil arbejdsproces. Det udførte alt-indstillingen og gik til hej. Efter udførelsen af hej læste den målet i den angivne rækkefølge. Den gennemsøgte hvert mål og dets afhængighed og udførte dem i rækkefølgen.
For at fjerne objekterne og den eksekverbare fil skal du udføre rensningsopgaven. For at udføre rensningsopgaven skal du udføre kommandoen som følger:
make clean
Overvej nedenstående output:
Ovenstående kommando vil fjerne alle objekter og eksekverbare filer. Se nedenstående snap af mappen:
Fra ovenstående billede kan vi se, at vi har renset vores bibliotek.
Variabler i make-kommandoen
Vi kan definere variablerne i vores makefile. For at definere variablerne skal du bruge '=' operatør. For eksempel, hvis vi vil oprette en variabel A og tildele en kommando gcc til den, skal du tildele den som:
filmwebsteder, der ligner 123movies
A=g++
Brug det som følger i vores makefile:
hello: hello.cpp ${A} hello.cpp -o hello
Det sendes til terminalen som:
g++ hello.cpp -o hello
Vi kan bruge $(A) i stedet for ${A}, da begge behandles ens af scriptet.
Kommentarer i makefile
For at tilføje en kommentar til make-filen skal du bruge '#' symbol. Hvis du f.eks. vil tilføje en kommentar i kompileringssektionen, skal du tilføje den som '# Dette vil kompilere programmet .' Kommentarer ignoreres af compileren.