Linux napraviti naredba se koristi za izgradnju i održavanje grupa programa i datoteka iz izvornog koda. U Linuxu je to jedna od najčešće korištenih naredbi programera. Pomaže programerima da instaliraju i kompiliraju mnoge pomoćne programe s terminala. Nadalje, upravlja procesom kompilacije velikih projekata. Štedi vrijeme kompilacije.
Glavni motiv naredbe make je razdvojiti veliki program na dijelove i provjeriti treba li ga ponovno prevesti ili ne. Također, izdaje potrebne naredbe za njihovo ponovno kompajliranje.
U ovom odjeljku koristit ćemo C++ programe budući da je C++ programski jezik objektno orijentiran jezik, ali možete koristiti bilo koji jezik instaliran na vašem računalu. Nije ograničen samo na programe; možemo ga koristiti i za opisivanje drugih zadataka.
Kako radi naredba make?
Naredba make uzima ciljeve kao argumente. Ovi argumenti navedeni su u 'Makefile'. Makefile sadrži ciljeve kao i pridružene akcije povezane s tim ciljevima.
Kada izvršimo naredbu make, ona traži makefile i skenira ga kako bi pronašla cilj i pristupila njegovim ovisnostima. Ako ovisnosti nisu navedene, tražit će ovisnost i izgradit će je. Izgradit će glavni cilj nakon što se izgrade ovisnosti.
Na primjer, ako želimo promijeniti samo jednu izvornu datoteku i izvršimo naredbu make; tako da će ovo prevesti samo objektnu datoteku koja je povezana s tom izvornom datotekom. To će uštedjeti puno vremena u konačnoj kompilaciji projekta.
Što je Makefile?
Naredba make poziva izvršenje makefilea. To je posebna datoteka koja sadrži naredbe ljuske koje stvaramo za održavanje projekta. Makefile sadrži ciljeve i naredbe za izvršenje. Nije dopušteno kreirati više od jednog makefilea. Preporuča se stvoriti zaseban direktorij za njega.
Prati nedavne datoteke, stoga ažurirajte samo one datoteke koje su potrebne. Ako imamo velik program s mnogo izvornih datoteka, moramo ponovno prevesti sve ovisne datoteke. Dakle, to može biti vrlo dugotrajan proces.
Makefile ima popis standarda. Ovi standardi pomažu sustavu da razumije koju naredbu želimo izvršiti. Ovi standardi su u dva dijela i odvojeni novim retkom. Prvi red je linija zavisnosti, a sljedeći se redovi smatraju akcije ili naredbe s. Naredbe su odvojene tabulatorom u novom retku.
The ovisnosti odredite odnos svake datoteke s izvornim datotekama. i cilj je izvršna datoteka, a kreira se nakon izvršenja naredbe make.
Mogućnosti
Naredba make olakšava razne opcije kako bi ga učinili specifičnijim. Neke važne opcije su sljedeće:
make -p -f/dev/null.
Razmotrimo neke primjere naredbe make. Vidjet ćemo osnovnu upotrebu makefilea, a nadalje, izradit ćemo neke C++ programe i makefile. Izvest ćemo neke operacije na njima kako bismo bolje razumjeli naredbu make.
b plus drvo
Osnovna upotreba naredbe make
Hajdemo razumjeti vrlo osnovnu upotrebu naredbe make i to bi vam moglo pomoći da shvatite kako funkcionira.
Napravite 'projekt' direktorija i promijenite direktorij u njega. Razmotrite sljedeće naredbe:
rezanje java
mkdir project cd project
Sada stvorite a 'Makefile' ima sljedeći sadržaj za prvi program:
say_hello: echo 'Hello World!'
Iz gornje datoteke, say_hello je cilj koji se ponaša kao funkcija u bilo kojem programskom jeziku, a echo će se smatrati radnjom. Morate imati na umu da radnju treba pisati pomoću a TAB. Cilj i akcija zajedno stvaraju pravilo za makefile. Sada izvršite naredbu make na sljedeći način:
Razmotrite donji izlaz:
Iz gornjeg izlaza možemo vidjeti da se prikazuje sama operacija odjeka. Ako ne želimo prikazati naredbu echo na izlazu, izvršimo echo počevši s '@' simbol. Za suzbijanje jeke ažurirajte sadržaj makefile-a na sljedeći način:
say_hello: @echo 'Hello World!'
Razmotrite donji izlaz:
Cilj može biti binarna datoteka koja ovisi o radnjama.
Dodajmo još nekoliko ciljeva, poput generiranja i popisa u make datoteci. Ažurirajte makefile na sljedeći način:
say_hello: @echo 'Hello World!' generate: @echo 'Creating files' touch file-{1..5}.txt list: @echo 'Listing files' ls
Ako izvršimo naredbu make, ona izvršava samo prvi cilj jer je to zadani cilj makefilea. Razmotrite donji izlaz:
Možemo promijeniti zadani cilj uključivanjem sadržaja ispod u našu make datoteku:
.DEFAULT_GOAL := generate
Dodajte ga u prvi redak datoteke na sljedeći način:
Gornji makefile smatrat će 'generiranje' kao zadani cilj. Izvršite make naredbu i ona će dati sljedeći izlaz:
Opcija DEFAULT GOAL izvršit će samo jedan cilj kako bi odredila više od jednog cilja za korištenje svih opcija. Za navođenje više od jednog cilja, ažurirajte prvi redak makefile-a na sljedeći način:
all: say_hello generate
Izvršit će navedeni cilj. Razmotrite donji izlaz:
Postoji još jedna opcija koja nam omogućuje da izvršimo sve ciljeve. Ako želimo izvršiti sve ciljeve makefilea, ažurirajte datoteku na sljedeći 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
Gornja datoteka izvršit će sve navedene ciljeve. Izvršite make naredbu, razmotrite donji izlaz:
Napredno korištenje naredbe make
Kreirajmo C++ projekt s datotekama main.cpp, function1.cpp, function2.cpp i datotekom ovisnosti function.h.
Kod datoteka je sljedeći:
c niz u nizu
glavni.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; }
funkcija2.cpp:
#include #include 'functions.h' void print_hello() { std::cout << 'Hello World'; }
funkcije.h:
void print_hello(); int factorial (int n);
Sada stvorite izvršnu datoteku gornjeg projekta izvršavanjem donje naredbe:
g++ main.cpp function1.cpp function2.cpp -o hello
Gornja naredba će stvoriti izvršnu datoteku 'zdravo' datoteka main.cpp, function1.cpp i function2.cpp.
Razmotrite donji izlaz:
Iz gornjeg izlaza, ako se uspješno izvede, neće dati nikakav izlaz.
Izvršimo isti zadatak koristeći makefile.
Stvorite datoteku kao Makefile i u njega stavite donji kod.
all: g++ main.cpp function1.cpp function2.cpp -o hello
Ključna riječ all koristi se za cilj, au novom retku stavite istu naredbu s TAB-om kao gore da odredite operaciju. Spremite datoteku. Razmotrite datoteku u nastavku:
Za rad izvršite naredbu na sljedeći način:
je odnos
make
Gornja naredba će stvoriti izvršnu datoteku 'hello' od navedenih datoteka. Razmotrite donji izlaz:
Dodajmo još neke zadatke u Makefile. Dodajte zadatak 'sastaviti' kako slijedi:
all: compile: g++ main.cpp function1.cpp function2.cpp -o hello
Za izvršenje zadatka sastaviti, izvršite naredbu ispod:
make compile
Gornja naredba će izvršiti zadatak prevođenja. Razmotrite donji izlaz:
Izvršimo još neke zadatke na našem makefileu.
ažurirajte Makefile na sljedeći 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 gornjeg makefilea stvorili smo tri objekta kao main.o, function1.o i function2.o. Nadalje, dali smo ovisnosti za ciljeve main.o, function1.o i function2.o kao main.cpp, function1.cpp i function2.cpp. Sve će mete unutar njega obavljati navedene zadatke. Također smo naveli čisti cilj za čišćenje svih ovisnosti i uklanjanje izvršne datoteke.
Sada izvršite naredbu make all da biste izvršili naš novi makefile.
make all
Razmotrite donji izlaz:
Iz gornjeg izlaza možemo vidjeti da je naredba prvo izvršila main.o, function1.o i function2.o. Stvorit će izvršnu i objektnu datoteku zadanih datoteka. Neće izvršiti čisti cilj jer ga nismo naveli u pozdravu. Razmotrite donje datoteke:
Naredba make ima jednostavan radni proces. Izvršio je sve opcije i otišao na hello. Nakon izvršenja hello, čita cilj u navedenom nizu. Pretražio je svaki cilj i njegovu ovisnost i izvršio ih u nizu.
Da biste uklonili objekte i izvršnu datoteku, izvedite zadatak čišćenja. Da biste izvršili zadatak čišćenja, izvršite naredbu na sljedeći način:
make clean
Razmotrite donji izlaz:
Gornja naredba će ukloniti sve objekte i izvršne datoteke. Pogledajte donji snimak imenika:
Iz gornje slike možemo vidjeti da smo očistili naš imenik.
Varijable u make naredbi
Možemo definirati varijable u našoj make datoteci. Za definiranje varijabli koristite '=' operater. Na primjer, ako želimo stvoriti varijablu A i dodijeliti joj naredbu gcc, dodijelite je kao:
kako sortirati arraylist u Javi
A=g++
Koristite ga na sljedeći način u našoj make datoteci:
hello: hello.cpp ${A} hello.cpp -o hello
Na terminal se prosljeđuje kao:
g++ hello.cpp -o hello
Možemo upotrijebiti $(A) umjesto ${A}, budući da skript tretira oboje.
Komentari u makefileu
Za dodavanje komentara u makefile, koristite '#' simbol. Na primjer, da biste dodali komentar u odjeljak sastavljanja, dodajte ga kao '# Ovo će kompilirati program .' Prevoditelj zanemaruje komentare.