Linux narediti ukaz se uporablja za gradnjo in vzdrževanje skupin programov in datotek iz izvorne kode. V Linuxu je to eden najpogosteje uporabljenih ukazov razvijalcev. Razvijalcem pomaga pri namestitvi in prevajanju številnih pripomočkov s terminala. Poleg tega upravlja postopek kompilacije velikih projektov. Prihrani čas kompilacije.
Glavni motiv ukaza make je razdeliti velik program na dele in preveriti, ali ga je treba znova prevesti ali ne. Prav tako izda potrebna naročila za njihovo ponovno prevajanje.
V tem razdelku bomo uporabljali programe C++, saj je programski jezik C++ objektno usmerjen jezik, vendar lahko uporabite kateri koli jezik, nameščen na vašem računalniku. Ni omejeno le na programe; lahko ga uporabimo tudi za opis drugih nalog.
Kako deluje ukaz make?
Ukaz make vzame cilje kot argumente. Ti argumenti so navedeni v 'Makefile'. Makefile vsebuje cilje in povezana dejanja, povezana s temi cilji.
Ko izvedemo ukaz make, poišče makefile in ga pregleda, da najde cilj in dostopa do njegovih odvisnosti. Če odvisnosti niso podane, bo poiskal odvisnost in jo zgradil. Zgradil bo glavni cilj, potem ko bodo zgrajene odvisnosti.
Na primer, če želimo spremeniti samo eno izvorno datoteko in izvedemo ukaz make; tako bo to prevedlo samo objektno datoteko, ki je povezana s to izvorno datoteko. To bo prihranilo veliko časa pri končnem sestavljanju projekta.
Kaj je Makefile?
Ukaz make prikliče izvedbo makefile. Gre za posebno datoteko, ki vsebuje lupinske ukaze, ki jih ustvarimo za vzdrževanje projekta. Makefile vsebuje cilje in ukaze za izvajanje. Ni dovoljeno ustvariti več kot ene datoteke makefile. Priporočljivo je, da zanj ustvarite ločen imenik.
Sledi nedavnim datotekam, zato posodobite samo tiste datoteke, ki so potrebne. Če imamo velik program z veliko izvornimi datotekami, moramo znova prevesti vse odvisne datoteke. Torej je lahko zelo dolgotrajen postopek.
Makefile ima seznam standardov. Ti standardi so v pomoč sistemu, da razume, kateri ukaz želimo izvesti. Ti standardi so v dveh delih in ločeni z novo vrstico. Prva vrstica je linija odvisnosti, in naslednje vrstice se štejejo kot dejanja ali ukaz s. Ukazi so ločeni z zavihkom v novi vrstici.
The odvisnosti določite razmerje vsake datoteke z izvornimi datotekami. In tarča je izvršljiva datoteka in se ustvari po izvedbi ukaza make.
Opcije
Ukaz make olajša različne možnosti, da je bolj specifičen. Nekatere pomembne možnosti so naslednje:
make -p -f/dev/null.
Razumejmo nekaj primerov ukaza make. Ogledali si bomo osnovno uporabo makefilea, nadalje pa bomo ustvarili nekaj programov v C++ in makefile. Na njih bomo izvedli nekaj operacij, da bomo bolje razumeli ukaz make.
opozorilno polje javascript
Osnovna uporaba ukaza make
Spoznajmo zelo osnovno uporabo ukaza make in morda vam bo pomagal razumeti, kako deluje.
Ustvarite 'projekt' imenika in ga spremenite v imenik. Upoštevajte spodnje ukaze:
mkdir project cd project
Zdaj ustvarite a 'Makefile' z naslednjo vsebino za prvi program:
koliko filmov misija nemogoče je
say_hello: echo 'Hello World!'
Iz zgornje datoteke je say_hello cilj, ki se obnaša kot funkcija v katerem koli programskem jeziku, odmev pa bo obravnavan kot dejanje. Ne smemo pozabiti, da je treba dejanje napisati z uporabo a TAB. Cilj in dejanje skupaj ustvarita pravilo za makefile. Zdaj izvedite ukaz make na naslednji način:
Razmislite o spodnjem rezultatu:
Iz zgornjega izhoda lahko vidimo, da se prikazuje sama operacija odmeva. Če na izhodu ne želimo prikazati ukaza echo, izvedemo echo, ki se začne z '@' simbol. Če želite zatreti odmev, posodobite vsebino makefile na naslednji način:
say_hello: @echo 'Hello World!'
Razmislite o spodnjem rezultatu:
Cilj je lahko binarna datoteka, ki je odvisna od dejanj.
Dodajmo še nekaj ciljev, kot sta generiranje in seznam v makefile. Posodobite makefile na naslednji način:
say_hello: @echo 'Hello World!' generate: @echo 'Creating files' touch file-{1..5}.txt list: @echo 'Listing files' ls
Če izvedemo ukaz make, izvede samo prvi cilj, ker je to privzeti cilj makefile. Razmislite o spodnjem rezultatu:
Privzeti cilj lahko spremenimo tako, da v našo makefile vključimo spodnjo vsebino:
.DEFAULT_GOAL := generate
Dodajte ga v prvo vrstico datoteke na naslednji način:
Zgornji makefile bo kot privzeti cilj upošteval 'generiranje'. Izvedite ukaz make in rezultat bo naslednji:
Možnost PRIVZETI CILJ bo izvedla samo en cilj, če želite določiti več kot en cilj za uporabo vseh možnosti. Če želite določiti več kot en cilj, posodobite prvo vrstico makefile, kot sledi:
all: say_hello generate
Izvedel bo podani cilj. Razmislite o spodnjem rezultatu:
Obstaja še ena možnost, ki nam omogoča, da izpolnimo vse cilje. Če želimo izvesti vse cilje makefilea, posodobimo datoteko na naslednji način:
.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
Zgornja datoteka bo izvedla vse navedene cilje. Izvedite ukaz make, upoštevajte spodnji rezultat:
Napredna uporaba ukaza make
Ustvarimo projekt C++ z datotekami main.cpp, function1.cpp, function2.cpp in datoteko odvisnosti function.h.
Koda datotek je naslednja:
java vzorčna koda
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; }
funkcija1.cpp:
#include 'functions.h' int factorial(int n) { if(n!=1) { return (n * factorial(n-1)); } else return 1; }
funkcija2.cpp:
#include #include 'functions.h' void print_hello() { std::cout << 'Hello World'; }
funkcije.h:
void print_hello(); int factorial (int n);
Zdaj ustvarite izvedljivo datoteko zgornjega projekta z izvedbo spodnjega ukaza:
g++ main.cpp function1.cpp function2.cpp -o hello
Zgornji ukaz bo ustvaril izvršljivo datoteko 'zdravo' datotek main.cpp, function1.cpp in function2.cpp.
Razmislite o spodnjem rezultatu:
Iz zgornjega izhoda, če je uspešno izveden, ne bo dal nobenega izhoda.
Izvedimo isto nalogo z uporabo makefile.
Ustvarite datoteko kot Makefile in vanj vstavite spodnjo kodo.
all: g++ main.cpp function1.cpp function2.cpp -o hello
Ključna beseda all se uporablja za cilj in v novo vrstico postavite isti ukaz s TAB kot zgoraj, da določite operacijo. Shranite datoteko. Razmislite o spodnji datoteki:
Za delovanje izvedite ukaz na naslednji način:
vrste zanke for
make
Zgornji ukaz bo ustvaril izvršljivo datoteko 'hello' navedenih datotek. Razmislite o spodnjem rezultatu:
Dodajmo še nekaj nalog v Makefile. Dodajte nalogo 'sestaviti' kot sledi:
all: compile: g++ main.cpp function1.cpp function2.cpp -o hello
Za izvedbo naloge prevajati, izvedite spodnji ukaz:
make compile
Zgornji ukaz bo izvedel nalogo prevajanja. Razmislite o spodnjem rezultatu:
Opravimo še nekaj nalog v naši makefile.
posodobite Makefile na naslednji način:
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
Iz zgornje make-datoteke smo ustvarili tri objekte kot main.o, function1.o in function2.o. Poleg tega smo zagotovili odvisnosti za cilje main.o, function1.o in function2.o kot main.cpp, function1.cpp in function2.cpp. Vse tarče bodo v njem izvajale določene naloge. Določili smo tudi čisti cilj za čiščenje vseh odvisnosti in odstranitev izvršljive datoteke.
Zdaj izvedite ukaz make all, da izvedete našo novo datoteko make.
make all
Razmislite o spodnjem rezultatu:
Iz zgornjega izhoda lahko vidimo, da je ukaz najprej izvedel main.o, function1.o oziroma function2.o. Ustvaril bo izvršljivo datoteko in datoteko predmetov danih datotek. Ne bo izvedel čistega cilja, ker ga nismo navedli v hello. Razmislite o spodnjih datotekah:
Ukaz make ima enostaven delovni proces. Izvedel je vse možnosti in šel na pozdrav. Po izvedbi ukaza hello prebere cilj v določenem zaporedju. Preiskal je vsak cilj in njegovo odvisnost ter jih izvršil v zaporedju.
Če želite odstraniti predmete in izvršljivo datoteko, izvedite opravilo čiščenja. Za izvedbo čistega opravila izvedite ukaz na naslednji način:
make clean
Razmislite o spodnjem rezultatu:
Zgornji ukaz bo odstranil vse predmete in izvršljive datoteke. Oglejte si spodnji posnetek imenika:
Iz zgornje slike lahko vidimo, da smo očistili naš imenik.
Spremenljivke v ukazu make
Spremenljivke lahko definiramo v naši makefile. Če želite definirati spremenljivke, uporabite '=' operater. Na primer, če želimo ustvariti spremenljivko A in ji dodeliti ukaz gcc, jo dodelite kot:
pretvorba niza v objekt json
A=g++
Uporabite ga v naši makefile na naslednji način:
hello: hello.cpp ${A} hello.cpp -o hello
Na terminal se posreduje kot:
g++ hello.cpp -o hello
Namesto ${A} lahko uporabimo $(A), saj skript oba obravnava enako.
Komentarji v makefile
Če želite dodati komentar v makefile, uporabite '#' simbol. Če želite na primer dodati komentar v razdelek za prevajanje, ga dodajte kot '# To bo prevedlo program .' Prevajalnik ignorira komentarje.