logo

Linux make príkaz

Linux urobiť príkaz sa používa na vytváranie a udržiavanie skupín programov a súborov zo zdrojového kódu. V Linuxe je to jeden z najčastejšie používaných príkazov vývojármi. Pomáha vývojárom inštalovať a kompilovať mnohé nástroje z terminálu. Ďalej sa zaoberá procesom zostavovania veľkých projektov. Šetrí to čas kompilácie.

Hlavným motívom príkazu make je určiť veľký program na časti a skontrolovať, či je potrebné ho prekompilovať alebo nie. Tiež vydáva potrebné príkazy na ich prekompilovanie.

V tejto časti budeme používať programy C++, pretože programovací jazyk C++ je objektovo orientovaný jazyk, ale môžete použiť akýkoľvek jazyk nainštalovaný na vašom počítači. Neobmedzuje sa len na programy; môžeme ho použiť aj na popis iných úloh.

Ako funguje príkaz make?

Príkaz make berie ciele ako argumenty. Tieto argumenty sú špecifikované v 'Makefile.' Makefile obsahuje ciele, ako aj súvisiace akcie súvisiace s týmito cieľmi.

Keď vykonáme príkaz make, vyhľadá súbor make a prehľadá ho, aby našiel cieľ a získal prístup k jeho závislostiam. Ak nie sú špecifikované závislosti, vyhľadá závislosť a vytvorí ju. Po vybudovaní závislostí vytvorí hlavný cieľ.

Napríklad, ak chceme zmeniť iba jeden zdrojový súbor a vykonáme príkaz make; takže to skompiluje iba objektový súbor, ktorý je spojený s týmto zdrojovým súborom. Ušetrí to veľa času pri konečnom zostavovaní projektu.

Čo je Makefile?

Príkaz make vyvolá vykonanie súboru makefile. Je to špeciálny súbor, ktorý obsahuje príkazy shellu, ktoré vytvárame na údržbu projektu. Makefile obsahuje ciele a príkazy na vykonanie. Nie je dovolené vytvárať viac ako jeden makefile. Odporúča sa preň vytvoriť samostatný adresár.

Sleduje najnovšie súbory, takže aktualizujte iba tie súbory, ktoré sú potrebné. Ak máme veľký program s mnohými zdrojovými súbormi, musíme prekompilovať všetky závislé súbory. Takže to môže byť veľmi časovo náročný proces.

Makefile obsahuje zoznam štandardov. Tieto štandardy sú užitočné pre systém, aby pochopil, aký príkaz chceme vykonať. Tieto normy sú rozdelené do dvoch častí a sú oddelené novým riadkom. Prvý riadok je línia závislosti, a nasledujúce riadky sa považujú za akcie alebo príkaz s. Príkazy sú oddelené tabulátorom v novom riadku.

The závislosti zadajte vzťah každého súboru so zdrojovými súbormi. A cieľ je spustiteľný súbor a vytvorí sa po vykonaní príkazu make.

možnosti

Príkaz make umožňuje rôzne možnosti, ako ho spresniť. Niektoré dôležité možnosti sú nasledovné:

    -b, -m:Tieto voľby sa používajú na ignorovanie kompatibility pre rôzne verzie príkazu make.-B, --vždy-robiť:Tieto možnosti sa používajú na bezpodmienečné vytvorenie všetkých cieľov.-C adresár, --adresár=adresár:Tieto možnosti sa používajú na zmenu adresára pred spustením súboru makefile.-d:Používa sa na tlač informácií o ladení.--debug[=VLAJKY]:Používa sa na tlač informácií o ladení spolu s bežným spracovaním. Ak príznak preskočíme, zobrazí podobné výsledky ako možnosť „-d“.-e, --environment-overrides:Používa sa na poskytnutie premenných prevzatých z priority prostredia do súboru makefile.-f súbor, --súbor=súbor, --makefile=SÚBOR:Používa sa na použitie súboru ako makefile.-i, --ignore-errors:Voľba '-i' sa používa na ignorovanie všetkých chýb v príkazoch.-Ja dir, --include-dir=dir:Používa sa na zadanie adresára na vyhľadanie zadaného súboru makefile. Ak zadáme veľa možností '-I', bude vyhľadávať v mnohých adresároch v poradí, ktoré sú špecifikované.-j [pracovné miesta], --jobs[=pracovné miesta]:Používa sa na určenie počtu úloh, ktoré sa majú spustiť súčasne. Ak poskytneme veľa možností '-j', posledná možnosť sa bude považovať za vykonanú. Ak nešpecifikujeme počet úloh, neobmedzí to úlohy, ktoré môžu bežať súčasne.-k, --pokračujem:Používa sa na pokračovanie v programe čo najviac po získaní chyby.-l [zaťaženie], --priemerné zaťaženie[=zaťaženie]:Používa sa na určenie, že sa nemá spustiť žiadna nová úloha, ak sú vo fronte iné úlohy a priemerná záťaž je minimálna.-n, --just-print, --dry-run, --recon:Používa sa na zobrazenie príkazu, ktorý sa má spustiť.-o súbor, --starý-súbor=súbor, --assume-starý=súbor:Používa sa na zabezpečenie toho, že značka neprerobí súbor, aj keď je starší ako jeho závislosti.-O[typ], --output-sync[=typ]:Používa sa na potvrdenie, že výstup každej úlohy je zostavený skôr ako zmiešaný výstup iných úloh. Je to užitočné pre spracovanie viacerých úloh s voľbou '-j'.-p, --print-data-base:Používa sa na tlač databázy, ktorá sa vytvára po prečítaní makefiles. Je tiež užitočné vytlačiť informácie o verzii, keď sa používa s voľbou '-v'. Ak chcete vytlačiť databázu bez pokusu o prerobenie akýchkoľvek súborov, vykonajte príkaz takto:
    make -p -f/dev/null.-q, --otázka:Voľba '-q' sa používa pre Režim otázok. Nespustí žiadny príkaz ani nič nevytlačí. Návratový stav je nula, iba ak je zadaný cieľ už synchronizovaný; inak sa zobrazí nenulový stav odchodu.-r, --no-builtin-rules:Používa sa na elimináciu používania vstavaných implicitných pravidiel.-R, --no-zabudované-premenné:Je to užitočné, ak nechceme definovať žiadnu vstavanú premennú.-s, --tichý, --tichý:Tieto možnosti sú tzv Tichá prevádzka. Obmedzuje tlač príkazov pri ich vykonávaní.-S, --nie-pokračovať, --stop:Používa sa na zrušenie efektu operácie '-k, --keep-going'.-t, --touch:Používa sa na dotyk súborov namiesto spúšťania ich príkazov.--stopa:Používa sa na sledovanie dispozície každého cieľa.-v, --version:Používa sa na tlač nainštalovanej verzie pomôcky make. Ďalej zobrazuje zoznam autorov, autorské práva a niektoré upozornenia týkajúce sa nástroja make.-w, --print-directory:Používa sa na sledovanie tlačovej správy, ktorá obsahuje pracovný adresár pred a po ďalšom spracovaní. Je užitočné vystopovať chyby z komplikovanej štruktúry rekurzívneho príkazu make.--no-print-adresár:Používa sa na vypnutie možnosti „-w“.-W súbor, --what-if=súbor, --new-file=súbor, --assume-new=súbor:Tieto možnosti predstierajú, že cieľový súbor bol práve upravený.--warn-undefined-variables:Táto možnosť sa používa na upozornenie, že sa odkazuje na nedefinovanú premennú.

Poďme pochopiť niekoľko príkladov príkazu make. Uvidíme základné použitie makefile a ďalej vytvoríme niekoľko programov v c++ a makefile. Vykonáme na nich niekoľko operácií, aby sme lepšie porozumeli príkazu make.

js načítať

Základné použitie príkazu make

Poďme pochopiť úplne základné použitie príkazu make a môže vám pomôcť pochopiť, ako to funguje.

Vytvorte adresár „projekt“ a zmeňte doň adresár. Zvážte nasledujúce príkazy:

 mkdir project cd project 

Teraz vytvorte a 'Makefile' s nasledujúcim obsahom pre prvý program:

 say_hello: echo 'Hello World!' 

Z vyššie uvedeného súboru je say_hello cieľ, ktorý sa správa ako funkcia v akomkoľvek programovacom jazyku a echo sa bude považovať za akciu. Je potrebné mať na pamäti, že akcia by mala byť napísaná pomocou a TAB. Cieľ a akcia spolu vytvárajú pravidlo pre makefile. Teraz vykonajte príkaz make takto:

Zvážte nasledujúci výstup:

Linux make príkaz

Z vyššie uvedeného výstupu môžeme vidieť, že sa zobrazuje samotná operácia ozveny. Ak nechceme na výstupe zobraziť príkaz echo, vykonajte echo začínajúce od '@' symbol. Ak chcete potlačiť ozvenu, aktualizujte obsah súboru makefile takto:

 say_hello: @echo 'Hello World!' 

Zvážte nasledujúci výstup:

Linux make príkaz

Cieľ môže byť binárny súbor, ktorý závisí od akcií.

Pridajme niekoľko ďalších cieľov, ako napríklad generovať a uvádzať v makefile. Aktualizujte makefile takto:

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

Ak vykonáme príkaz make, vykoná sa iba prvý cieľ, pretože je to predvolený cieľ súboru makefile. Zvážte nasledujúci výstup:

Linux make príkaz

Predvolený cieľ môžeme zmeniť zahrnutím nižšie uvedeného obsahu do nášho súboru Makefile:

cm na stopy a palce
 .DEFAULT_GOAL := generate 

Pridajte ho do prvého riadku súboru takto:

Linux make príkaz

Vyššie uvedený makefile bude považovať „generovať“ za predvolený cieľ. Vykonajte príkaz make a výstup bude nasledujúci:

Linux make príkaz

Voľba DEFAULT GOAL (VÝCHOZÍ CIEĽ) vykoná iba jeden cieľ, ak chcete zadať viac ako jeden cieľ na použitie všetkých možností. Ak chcete zadať viac ako jeden cieľ, aktualizujte prvý riadok súboru makefile takto:

 all: say_hello generate 

Vykoná zadaný cieľ. Zvážte nasledujúci výstup:

Linux make príkaz

Existuje ďalšia možnosť, ktorá nám umožňuje vykonať všetky ciele. Ak chceme spustiť všetky ciele súboru makefile, aktualizujeme súbor takto:

 .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 

Vyššie uvedený súbor vykoná všetky zadané ciele. Vykonajte príkaz make, zvážte nasledujúci výstup:

Linux make príkaz

Pokročilé použitie príkazu make

Vytvorme C++ projekt so súbormi main.cpp, function1.cpp, function2.cpp a závislým súborom function.h.

Kód súborov je nasledujúci:

centrovanie obrázkov v css

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

function.h:

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

Teraz vytvorte spustiteľný súbor vyššie uvedeného projektu vykonaním nižšie uvedeného príkazu:

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

Vyššie uvedený príkaz vytvorí spustiteľný súbor 'Ahoj' zo súborov main.cpp, function1.cpp a function2.cpp.

Zvážte nasledujúci výstup:

Linux make príkaz

Z vyššie uvedeného výstupu, ak je úspešne vykonaný, neposkytne žiadny výstup.

Vykonajte rovnakú úlohu pomocou súboru makefile.

Vytvorte súbor ako Makefile a vložte do nej nižšie uvedený kód.

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

Kľúčové slovo all sa používa pre cieľ a na nový riadok zadajte rovnaký príkaz s TAB ako vyššie, aby ste špecifikovali operáciu. Uložte súbor. Zvážte nasledujúci súbor:

Linux make príkaz

Ak chcete pracovať, vykonajte príkaz takto:

powershell väčší alebo rovný
 make 

Vyššie uvedený príkaz vytvorí spustiteľný súbor „ahoj“ zo špecifikovaných súborov. Zvážte nasledujúci výstup:

Linux make príkaz

Pridajme do Makefile nejaké ďalšie úlohy. Pridajte úlohu 'kompilovať' nasledovne:

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

Na vykonanie úlohy zostaviť, vykonajte nižšie uvedený príkaz:

 make compile 

Vyššie uvedený príkaz vykoná úlohu kompilácie. Zvážte nasledujúci výstup:

Linux make príkaz

Poďme vykonať niekoľko ďalších úloh v našom súbore Makefile.

aktualizujte súbor Makefile takto:

 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 

Z vyššie uvedeného makefile sme vytvorili tri objekty ako main.o, function1.o a function2.o. Ďalej sme poskytli závislosti pre ciele main.o, function1.o a function2.o ako main.cpp, function1.cpp a function2.cpp. Všetky ciele budú v rámci nej vykonávať zadané úlohy. Tiež sme špecifikovali čistý cieľ na vyčistenie všetkých závislostí a odstránenie spustiteľného súboru.

Teraz vykonajte príkaz make all na spustenie nášho nového súboru makefile.

 make all 

Zvážte nasledujúci výstup:

Linux make príkaz

Z vyššie uvedeného výstupu môžeme vidieť, že príkaz najskôr vykonal main.o, function1.o a function2.o. Vytvorí spustiteľný súbor a súbor objektov daných súborov. Nevykoná čistý cieľ, pretože sme ho nešpecifikovali v hello. Zvážte nasledujúce súbory:

Linux make príkaz

Príkaz make má priamy pracovný proces. Vykonala možnosť all a prešla na ahoj. Po vykonaní hello načítal cieľ v určenom poradí. Prehľadal každý cieľ a jeho závislosť a vykonal ich v poradí.

Ak chcete odstrániť objekty a spustiteľný súbor, vykonajte úlohu čistenia. Ak chcete vykonať čistú úlohu, vykonajte príkaz takto:

 make clean 

Zvážte nasledujúci výstup:

Linux make príkaz

Vyššie uvedený príkaz odstráni všetky objekty a spustiteľné súbory. Pozrite si nižšie uvedený záber adresára:

Linux make príkaz

Z vyššie uvedeného obrázku vidíme, že sme vyčistili náš adresár.

Premenné v príkaze make

Premenné môžeme definovať v našom makefile. Na definovanie premenných použite '=' operátor. Napríklad, ak chceme vytvoriť premennú A a priradiť k nej príkaz gcc, priraďme ju ako:

stdin v c
 A=g++ 

Použite ho takto v našom makefile:

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

Do terminálu sa odovzdáva ako:

 g++ hello.cpp -o hello 

Namiesto ${A} môžeme použiť $(A), pretože skript s oboma zaobchádza rovnako.

Komentáre v makefile

Ak chcete pridať komentár do súboru makefile, použite '#' symbol. Ak chcete napríklad pridať komentár do sekcie kompilácie, pridajte ho ako '# Týmto sa skompiluje program .' Komentáre sú kompilátorom ignorované.