logo

Linux lav kommando

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:

    -b, -m:Disse muligheder bruges til at ignorere kompatibiliteten for de forskellige versioner af make-kommandoen.-B, --laver-altid:Disse muligheder bruges til ubetinget at lave alle mål.-C dir, --directory=dir:Disse muligheder bruges til at ændre mappen, før make-filen udføres.-d:Det bruges til at udskrive fejlfindingsoplysningerne.--debug[=FLAGS]:Det bruges til at udskrive fejlfindingsoplysningerne sammen med normal behandling. Hvis vi springer flaget over, vil det vise lignende resultater som '-d'-indstillingen.-e, --environment-tilsidesætter:Det bruges til at give variablerne taget fra miljøets forrang til makefile.-f fil, --fil=fil, --makefile=FIL:Det bruges til at bruge en fil som en makefil.-i, --ignorer-fejl:Indstillingen '-i' bruges til at ignorere alle fejl i kommandoer.-I dir, --include-dir=dir:Det bruges til at specificere en mappe til at søge efter den angivne make-fil. Hvis vi angiver de mange '-I' muligheder, vil den søge i de mange mapper i den rækkefølge, der er angivet.-j [jobs], --jobs[=jobs]:Det bruges til at angive antallet af job, der skal køres samtidigt. Hvis vi giver mange '-j' muligheder, vil den sidste blive anset for at blive udført. Hvis vi ikke angiver antallet af job, vil det ikke begrænse de jobs, der kan køre samtidigt.-k, --fortsæt:Det bruges til at fortsætte programmet så meget som muligt efter at have fået en fejl.-l [belastning], --belastningsgennemsnit[=belastning]:Det bruges til at specificere, at ingen ny opgave skal startes, hvis andre opgaver er i køen, og belastningsgennemsnittet er på sit minimum.-n, --just-print, --dry-run, --recon:Det bruges til at vise den kommando, der ville blive kørt.-o fil, --old-fil=fil, --assume-old=fil:Det bruges til at sikre, at mærket ikke vil lave filen om, selvom den er ældre end dens afhængigheder.-O[type], --output-sync[=type]:Det bruges til at bekræfte, at outputtet af hver opgave er sat sammen i stedet for et blandet output af andre opgaver. Det er nyttigt til behandling af flere job med muligheden '-j'.-p, --print-database:Det bruges til at udskrive databasen, der producerer efter at have læst make-filerne. Det er også nyttigt at udskrive versionsoplysningerne, når det bruges med '-v'-indstillingen. For at udskrive databasen uden at forsøge at lave nogen filer om, skal du udføre kommandoen som følger:
    lav -p -f/dev/nul.-q, --spørgsmål:Indstillingen '-q' bruges til Spørgsmålstilstand. Det vil ikke køre nogen kommando eller udskrive noget. Det vil kun returnere en exit-status er nul, hvis det angivne mål allerede er synkroniseret; ellers vil den vise en udgangsstatus, der ikke er nul.-r, --no-builtin-regler:Det bruges til at eliminere brugen af ​​de indbyggede implicitte regler.-R, --no-builtin-variables:Det er nyttigt, hvis vi ikke ønsker at definere nogen indbygget variabel.-s, --stille, --stille:Disse muligheder kaldes Lydløs drift. Det begrænser at udskrive kommandoerne, efterhånden som de udføres.-S, --ikke-bliv ved, --stop:Det bruges til at annullere effekten af ​​'-k, --keep-going' operation.-t, --touch:Det bruges til at røre ved filer i stedet for at køre deres kommandoer.--spor:Det bruges til at spore placeringen af ​​hvert mål.-v, --version:Det bruges til at udskrive den installerede version af make-værktøjet. Yderligere viser den en liste over forfattere, ophavsret og nogle meddelelser om make-værktøjet.-w, --print-mappe:Den bruges til at spore en udskriftsmeddelelse, der indeholder en arbejdsmappe før og efter anden behandling. Det er nyttigt at spore fejl fra den komplicerede struktur af rekursiv make-kommando.--no-print-mappe:Den bruges til at slå '-w' fra.-W fil, --what-if=fil, --new-file=fil, --assume-new=fil:Disse muligheder foregiver, at målfilen lige er blevet ændret.--advar-udefinerede-variabler:Denne mulighed bruges til at advare om, at der refereres til en udefineret variabel.

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:

Linux lav kommando

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
Linux lav kommando

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:

Linux lav kommando

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:

Linux lav kommando

Ovenstående makefil vil betragte 'generere' som standardmålet. Udfør make-kommandoen, og den vil give output som følger:

Linux lav kommando

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:

Linux lav kommando

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:

Linux lav kommando

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:

Linux lav kommando

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:

Linux lav kommando

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:

Linux lav kommando

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:

Linux lav kommando

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:

Linux lav kommando

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:

Linux lav kommando

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:

Linux lav kommando

Ovenstående kommando vil fjerne alle objekter og eksekverbare filer. Se nedenstående snap af mappen:

Linux lav kommando

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.