logo

Linux make komanda

Linux veidot komanda tiek izmantota, lai izveidotu un uzturētu programmu un failu grupas no pirmkoda. Operētājsistēmā Linux tā ir viena no izstrādātāju visbiežāk izmantotajām komandām. Tas palīdz izstrādātājiem no termināļa instalēt un apkopot daudzas utilītas. Turklāt tā apstrādā lielu projektu apkopošanas procesu. Tas ietaupa kompilācijas laiku.

Komandas make galvenais motīvs ir sadalīt lielu programmu daļās un pārbaudīt, vai tā ir jāpārkompilē vai nē. Tas arī izdod nepieciešamos rīkojumus to pārkompilēt.

Šajā sadaļā mēs izmantosim C++ programmas, jo C++ programmēšanas valoda ir objektorientēta valoda, taču jūs varat izmantot jebkuru jūsu datorā instalēto valodu. Tas neaprobežojas tikai ar programmām; mēs varam to izmantot, lai aprakstītu arī citus uzdevumus.

Kā darbojas komandas izveide?

Komanda make izmanto mērķus kā argumentus. Šie argumenti ir norādīti 'Makefile'. Makefile satur mērķus, kā arī ar šiem mērķiem saistītās darbības.

Kad mēs izpildām komandu make, tā meklē makefile un skenē to, lai atrastu mērķi un piekļūtu tā atkarībām. Ja atkarības nav norādītas, tā meklēs atkarību un izveidos to. Tas izveidos galveno mērķi pēc atkarību izveidošanas.

Piemēram, ja mēs vēlamies mainīt tikai vienu avota failu un izpildām komandu make; tādējādi tiks apkopots tikai objekta fails, kas ir saistīts ar šo avota failu. Tas ietaupīs daudz laika projekta galīgajā apkopojumā.

Kas ir Makefile?

Komanda make izsauc makefile izpildi. Tas ir īpašs fails, kurā ir čaulas komandas, kuras mēs izveidojam, lai uzturētu projektu. Makefile satur izpildes mērķus un komandas. Nav atļauts izveidot vairāk kā vienu makefile. Tam ieteicams izveidot atsevišķu direktoriju.

Tas seko jaunākajiem failiem, tāpēc atjauniniet tikai tos failus, kas ir nepieciešami. Ja mums ir liela programma ar daudziem avota failiem, mums ir jāpārkompilē visi atkarīgie faili. Tātad, tas var būt ļoti laikietilpīgs process.

Makefile ir standartu saraksts. Šie standarti palīdz sistēmai saprast, kādu komandu mēs vēlamies izpildīt. Šie standarti ir divās daļās un atdalīti ar jaunu līniju. Pirmā rinda ir atkarības līnija, un nākamās rindas tiek uzskatītas par darbības vai komandas s. Komandas jaunajā rindā ir atdalītas ar cilni.

The atkarības norādiet katra faila saistību ar avota failiem. Un mērķis ir izpildāms fails, un tas tiek izveidots pēc komandas make izpildes.

Iespējas

Komanda make atvieglo dažādas iespējas, lai padarītu to precīzāku. Dažas svarīgas iespējas ir šādas:

    -b, -m:Šīs opcijas tiek izmantotas, lai ignorētu saderību ar dažādām komandas make versijām.-B, --vienmēr-izdarīt:Šīs opcijas tiek izmantotas, lai bez nosacījumiem izveidotu visus mērķus.-C dir, -- directory=dir:Šīs opcijas tiek izmantotas, lai mainītu direktoriju pirms makefile izpildes.-d:To izmanto, lai izdrukātu atkļūdošanas informāciju.--atkļūdot[=KAROGI]:To izmanto, lai drukātu atkļūdošanas informāciju kopā ar parasto apstrādi. Ja mēs izlaidīsim karogu, tas parādīs līdzīgus rezultātus kā opcija “-d”.-e, --environment-overrides:To izmanto, lai nodrošinātu mainīgos lielumus, kas ņemti no vides prioritātes uz makefile.-f fails, --file=fails, --makefile=FILE:To izmanto, lai izmantotu failu kā makefile.-i, --ignorēt kļūdas:Opciju “-i” izmanto, lai ignorētu visas kļūdas komandās.-I dir, --include-dir=dir:To izmanto, lai norādītu direktoriju, lai meklētu norādīto makefile. Ja mēs norādām daudzas “-I” opcijas, tā veiks meklēšanu daudzos direktorijos norādītajā secībā.-j [darbi], --darbi[=darbi]:To izmanto, lai norādītu vienlaikus izpildāmo darbu skaitu. Ja mēs nodrošināsim daudzas opcijas “-j”, tiks uzskatīts, ka tiek izpildīta pēdējā. Ja mēs nenorādīsim darbu skaitu, tas neierobežos darbus, kas var darboties vienlaikus.-k, --turpiniet:To izmanto, lai pēc iespējas vairāk turpinātu programmu pēc kļūdas saņemšanas.-l [slodze], --load-average[=slodze]:To izmanto, lai norādītu, ka nevajadzētu sākt jaunu uzdevumu, ja rindā ir citi uzdevumi un vidējā slodze ir minimāla.-n, --just-print, --dry-run, --recon:To izmanto, lai parādītu komandu, kas tiks izpildīta.-o fails, --old-file=file, --assume-old=file:To izmanto, lai nodrošinātu, ka ražotājs nepārveidos failu pat tad, ja tas ir vecāks par tā atkarībām.-O[tips], --izejas sinhronizācija[=tips]:To izmanto, lai apstiprinātu, ka katra uzdevuma izvade ir salikta kopā, nevis kā citu uzdevumu jaukta izvade. Tas ir noderīgi vairāku darbu apstrādei ar opciju '-j'.-p, --print-data-base:To izmanto, lai drukātu datubāzi, kas tiek izveidota pēc makefailu lasīšanas. Ir arī noderīgi izdrukāt versijas informāciju, ja to lieto kopā ar opciju “-v”. Lai izdrukātu datu bāzi, nemēģinot pārtaisīt nevienu failu, izpildiet komandu šādi:
    padarīt -p -f/dev/null.-q, --jautājums:Opcija '-q' tiek izmantota Jautājumu režīms. Tas nedarbos nevienu komandu un neko nedrukās. Tas atgriezīs izejas statusu nulle tikai tad, ja norādītais mērķis jau ir sinhronizēts; pretējā gadījumā tiks parādīts izejas statuss, kas nav nulle.-r, --no-builtin-rules:To izmanto, lai izslēgtu iebūvēto netiešo noteikumu izmantošanu.-R, --no-builtin-mainīgie:Tas ir noderīgi, ja nevēlamies definēt nevienu iebūvēto mainīgo.-s, --kluss, --kluss:Šīs iespējas sauc Klusa darbība. Tas ierobežo komandu drukāšanu, kad tās tiek izpildītas.-S, --neturpiniet, --stop:To izmanto, lai atceltu darbības “-k, --keep-going” efektu.-t, --touch:To izmanto, lai pieskartos failiem, nevis palaistu to komandas.-- Trace:To izmanto, lai izsekotu katra mērķa izvietojumu.-v, --versija:To izmanto, lai drukātu utilīta make instalēto versiju. Turklāt tajā tiek parādīts autoru saraksts, autortiesības un daži paziņojumi par utilītu make.-w, --print-directory:To izmanto, lai izsekotu drukas ziņojumu, kas satur darba direktoriju pirms un pēc citas apstrādes. Ir lietderīgi izsekot kļūdas no rekursīvās make komandas sarežģītās struktūras.--nedrukāšanas direktorijs:To izmanto, lai izslēgtu opciju “-w”.-W fails, --what-if=file, --new-file=file, --sume-new=file:Šīs opcijas izliekas, ka mērķa fails ir tikko modificēts.--warn-undefined-variables:Šī opcija tiek izmantota, lai brīdinātu, ka ir atsauce uz nedefinētu mainīgo.

Sapratīsim dažus komandas make piemērus. Mēs redzēsim makefile pamata lietojumu, un tālāk mēs izveidosim dažas c++ programmas un makefile. Mēs ar tiem veiksim dažas darbības, lai labāk izprastu komandu make.

js daudzrindu virkne

Pamata komandas make izmantošana

Izpratīsim komandas make pamata lietojumu, un tas var palīdzēt jums saprast, kā tā darbojas.

Izveidojiet direktoriju 'projekts' un mainiet direktoriju uz to. Apsveriet tālāk norādītās komandas:

 mkdir project cd project 

Tagad izveidojiet a 'Makefile' ar šādu saturu pirmajai programmai:

 say_hello: echo 'Hello World!' 

No iepriekš minētā faila say_hello ir mērķis, kas darbojas kā funkcija jebkurā programmēšanas valodā, un atbalss tiks uzskatīta par darbību. Jāatceras, ka darbība jāraksta, izmantojot a TAB. Mērķis un darbība kopā veido makefile noteikumu. Tagad izpildiet komandu make šādi:

Apsveriet tālāk norādīto izvadi:

Linux make komanda

No iepriekš minētās izvades mēs varam redzēt, kā tiek parādīta pati atbalss darbība. Ja mēs nevēlamies, lai izvadā tiktu parādīta atbalss komanda, izpildiet atbalsi, sākot ar '@' simbols. Lai nomāktu atbalsi, atjauniniet makefile saturu šādi:

 say_hello: @echo 'Hello World!' 

Apsveriet tālāk norādīto izvadi:

Linux make komanda

Mērķis var būt binārs fails, kas ir atkarīgs no darbībām.

java vizualizētājs

Pievienosim vēl dažus mērķus, piemēram, ģenerēšanu un sarakstu makefile. Atjauniniet makefile šādi:

 say_hello: @echo 'Hello World!' generate: @echo 'Creating files' touch file-{1..5}.txt list: @echo 'Listing files' ls 

Ja izpildām komandu make, tā izpilda tikai pirmo mērķi, jo tas ir makefile noklusējuma mērķis. Apsveriet tālāk norādīto izvadi:

Linux make komanda

Mēs varam mainīt noklusējuma mērķi, iekļaujot tālāk norādīto saturu mūsu makefailā:

 .DEFAULT_GOAL := generate 

Pievienojiet to faila pirmajai rindai šādi:

Linux make komanda

Iepriekš minētajā makefile par noklusējuma mērķi tiks uzskatīts “ģenerēt”. Izpildiet komandu make, un tā sniegs izvadi šādi:

Linux make komanda

Opcija DEFAULT GOAL izpildīs tikai vienu mērķi, lai norādītu vairāk nekā vienu mērķi, lai izmantotu visas opcijas. Lai norādītu vairāk nekā vienu mērķi, atjauniniet makefile pirmo rindiņu šādi:

 all: say_hello generate 

Tas izpildīs norādīto mērķi. Apsveriet tālāk norādīto izvadi:

Linux make komanda

Ir vēl viena iespēja, kas ļauj izpildīt visus mērķus. Ja vēlamies izpildīt visus makefile mērķus, atjauniniet failu šādi:

 .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 

Iepriekš minētais fails izpildīs visus norādītos mērķus. Izpildiet komandu make, apsveriet tālāk norādīto izvadi:

Linux make komanda

Uzlabota komandas make izmantošana

Izveidosim C++ projektu ar failiem main.cpp, function1.cpp, function2.cpp un atkarības failu function.h.

Failu kods ir šāds:

skaits atšķirīgs sql

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; } 

function1.cpp:

 #include 'functions.h' int factorial(int n) { if(n!=1) { return (n * factorial(n-1)); } else return 1; } 

function2.cpp:

 #include #include 'functions.h' void print_hello() { std::cout << 'Hello World'; } 

Funkcijas.h:

 void print_hello(); int factorial (int n); 

Tagad izveidojiet iepriekš minētā projekta izpildāmo failu, izpildot tālāk norādīto komandu:

 g++ main.cpp function1.cpp function2.cpp -o hello 

Iepriekš minētā komanda izveidos izpildāmo failu 'Sveiki' no failiem main.cpp, function1.cpp un function2.cpp.

Apsveriet tālāk norādīto izvadi:

Linux make komanda

No iepriekš minētās izvades, ja tā tiek veiksmīgi izpildīta, tā nedos nekādu izvadi.

Veiksim to pašu uzdevumu, izmantojot makefile.

Izveidojiet failu kā Makefile un ievietojiet tajā zemāk esošo kodu.

 all: g++ main.cpp function1.cpp function2.cpp -o hello 

Mērķim tiek izmantots atslēgvārds all, un jaunā rindiņā ievietojiet to pašu komandu ar TAB, kā norādīts iepriekš, lai norādītu darbību. Saglabājiet failu. Apsveriet tālāk redzamo failu:

Linux make komanda

Lai strādātu, izpildiet komandu šādi:

mašīnraksta datuma veids
 make 

Iepriekš minētā komanda izveidos norādīto failu izpildāmo failu 'sveiki'. Apsveriet tālāk norādīto izvadi:

Linux make komanda

Pievienosim Makefile vēl dažus uzdevumus. Pievienojiet uzdevumu 'sastādīt' sekojoši:

 all: compile: g++ main.cpp function1.cpp function2.cpp -o hello 

Lai izpildītu uzdevumu sastādīt, izpildiet tālāk norādīto komandu:

 make compile 

Iepriekš minētā komanda izpildīs kompilēšanas uzdevumu. Apsveriet tālāk norādīto izvadi:

Linux make komanda

Veiksim vēl dažus uzdevumus mūsu makefile.

atjauniniet Makefile šādi:

 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 

No iepriekš minētā makefaila esam izveidojuši trīs objektus kā main.o, function1.o un function2.o. Turklāt mēs esam nodrošinājuši atkarības mērķiem main.o, function1.o un function2.o attiecīgi kā main.cpp, function1.cpp un function2.cpp. Visi mērķi tajā veiks norādītos uzdevumus. Mēs esam arī norādījuši tīru mērķi, lai notīrītu visas atkarības un noņemtu izpildāmo failu.

Tagad izpildiet komandu make all, lai izpildītu mūsu jauno makefile.

 make all 

Apsveriet tālāk norādīto izvadi:

Linux make komanda

No iepriekš minētās izvades mēs redzam, ka komanda vispirms izpildīja attiecīgi main.o, function1.o un function2.o. Tas izveidos norādīto failu izpildāmo un objektu failu. Tas neizpildīs tīro mērķi, jo mēs to neesam norādījuši sveikā. Apsveriet tālāk norādītos failus.

Linux make komanda

Komandai make ir tiešs darba process. Tas izpildīja visas iespējas un devās uz sveiki. Pēc hello izpildīšanas tas nolasīja mērķi norādītajā secībā. Tā meklēja katru mērķi un tā atkarību un izpildīja tos secīgi.

Lai noņemtu objektus un izpildāmo failu, veiciet tīro uzdevumu. Lai veiktu tīru uzdevumu, izpildiet komandu šādi:

 make clean 

Apsveriet tālāk norādīto izvadi:

Linux make komanda

Iepriekš minētā komanda noņems visus objektus un izpildāmos failus. Skatiet tālāk redzamo direktorija attēlu:

Linux make komanda

No iepriekš redzamā attēla mēs redzam, ka esam iztīrījuši savu direktoriju.

Mainīgie komandā make

Mēs varam definēt mainīgos mūsu makefile. Lai definētu mainīgos, izmantojiet '=' operators. Piemēram, ja mēs vēlamies izveidot mainīgo A un piešķirt tam komandu gcc, piešķiriet to kā:

alfa beta atzarošanas piemērs
 A=g++ 

Izmantojiet to šādi mūsu makefile:

 hello: hello.cpp ${A} hello.cpp -o hello 

Tas tiek nodots terminālim šādi:

 g++ hello.cpp -o hello 

Mēs varam izmantot $(A), nevis ${A}, jo skripts uz abiem attiecas vienādi.

Komentāri makefilē

Lai pievienotu komentāru makefile, izmantojiet '#' simbols. Piemēram, lai kompilēšanas sadaļā pievienotu komentāru, pievienojiet to kā '# Tas kompilēs programmu .' Kompilators komentārus ignorē.