Zamjenski znakovi i Foreach u Makefileu

Zamjenski Znakovi I Foreach U Makefileu



Datoteka se uvijek sastoji od različite vrste sadržaja: bilo da se radi o jednostavnoj tekstualnoj datoteci, datoteci programskog koda ili bilo kojoj make datoteci. Vrsta sadržaja bilo koje datoteke čini je jedinstvenom i razlikuje je od ostalih formata datoteka. Upravo tako, makefile se sastoji od pravila koja koriste različite elemente za ispravno obavljanje svog posla. Od tih elemenata, postoji zamjenski znak i foreach koji su potrebni za izvođenje nečeg jedinstvenog i ekstra. Unutar ovog vodiča raspravljat ćemo o moći zamjenskih znakova i foreach dok se koriste u make datoteci.

Zamjenski znakovi u Makefileu

Općenito, poznato je da je zamjenski znak faktor koji se ne može predvidjeti i može promijeniti situaciju na bilo koji mogući način. Zamjenski znakovi u make datoteci koriste se za izvođenje bonusa otkrivanja svih mogućih uzoraka iz trenutnog radnog direktorija, bilo da se radi o datoteci ili bilo kojoj mapi. Ove izvorne datoteke mogu biti bilo koje vrste.







Da biste koristili zamjenski znak u make datoteci, trebali biste koristiti ključnu riječ 'zamjenski znak' koja slijedi iza zvjezdice '*' ili '?' znak i datotečni nastavak koji je povezan točkom. Također možete koristiti '?' znak za traženje jednog znaka i “*” za podudaranje s bilo kojim brojem znakova. Cijela ova struktura trebala bi se koristiti unutar zagrada i znaka '$'. Na primjer, deklariramo varijablu 'SRCS' koja svoju datoteku vrijednosti dobiva putem zamjenskog znaka. Ovaj zamjenski znak traži sve datoteke s 'cpp' uzorkom na kraju.





Foreach u Makefileu

Funkcija foreach makefilea radi točno kao foreach petlja u programskim jezicima – ponavljanje preko stavki na popisu. Funkcija foreach u makefileu izvodi određenu radnju na svakoj stavci popisa. Ovaj element može biti varijabla ili bilo koja izvorna datoteka. Na primjer, razrađujemo sintaksu funkcije foreach u makefileu preko varijable SOURCES koja sadrži popis od tri izvorne datoteke. Funkcija foreach koristi ovu varijablu SOURCES za stvaranje istog naziva za tri objektne datoteke ponavljanjem popisa izvornih datoteka i njihovim spremanjem u drugu varijablu 'OBJEKTI'. Posljednja dva retka pokazuju kako se makefile pravilo može koristiti za stvaranje objektne datoteke za svaku C datoteku nakon ponavljanja.





IZVORI := datoteka1.c datoteka2.c datoteka3.c
OBJEKTI := $ ( foreach src,$ ( IZVORI ) ,$ ( src:.c=.o ) )
$OBJEKTI : % .O: % .c
$ ( CC ) $ ( CZASTAVE ) -c $ < -O $ @

Primjer 1: Korištenje zamjenskih znakova

Za prikaz ilustracije i rada zamjenskih znakova i funkcija foreach, uvodimo C++ datoteku. Ova datoteka 'salary.cpp' pokreće se upotrebom zaglavlja 'iostream' kako bi se omogućila glatka upotreba ulaznih i izlaznih tokova. Glavna metoda deklarira varijablu 's' cjelobrojnog tipa i naredbu 'cout' za traženje ulazne vrijednosti tijekom izvođenja. Standardni ulazni tok 'cin' dobiva vrijednost od korisnika tijekom izvođenja i sprema je u varijablu 's'. 'Cout' prikazuje vrijednost koju je unio korisnik na zaslonu konzole.

#include
korištenje imenskog prostora std;
int glavni ( ) {
int s;
cout << 'Unesite plaću: ' ;
jelo >> s;
cout << ' \n Plaća: ' << s << endl;
povratak 0 ;
}



Pokrećemo makefile s varijablom “CXX” koja definira kompajler za C++, a varijabla CXXFLAGS drži oznake za kompajler C++. Varijabla EXECUTABLE sadrži naziv izvršne 'hello' datoteke koja se generira nakon izvođenja makefile. SRCS varijabla dobiva sve C++ datoteke iz trenutnog direktorija koristeći zamjenski znak “*” za pretraživanje bilo kojeg uzorka koji završava s “.cpp”. Varijabla OBJS sadrži nazive objektnih datoteka koje treba izraditi korištenjem varijable SRCS, zamjenjujući ekstenziju “cpp” s “o”. Zadani cilj “all” gradi makefile i ovisi o varijabli EXECUTABLE.

Prvo pravilo stvara ciljnu 'hello' datoteku koja ovisi o OBJS varijabli (imena objektnih datoteka) object file koristeći imena datoteka koja su generirana preko 'OBJS' varijable. Drugo makefile pravilo generira objektnu datoteku s ekstenzijom '.o' koja ovisi o C++ datoteci nakon kompajliranja C++ kodne datoteke. Ovdje je '%' zamjenski znak za traženje naziva datoteka bilo kojeg uzorka koji završava s 'cpp'. Na kraju, čisti cilj koristi svoju naredbu 'rm' za prisilno čišćenje novogeneriranih izvršnih i objektnih datoteka iz direktorija pomoću oznake '-f'.

CXX = g++
CXXZASTAVE = -Zid -std =c++ jedanaest
IZVRŠIV = zdravo
SRCS = $ ( zamjenski znak * .cpp )
OBJS = $ ( SRCS:.cpp=.o )
sve: $ ( IZVRŠIV )
$ ( IZVRŠIV ) : $ ( OBJS )
$ ( CXX ) $ ( CXXZASTAVE ) -O $ @ $ ( OBJS )
% .O: % .cpp
$ ( CXX ) $ ( CXXZASTAVE ) -c $ < -O $ @
čist:
rm -f $ ( IZVRŠIV ) $ ( OBJS )

Nakon pokretanja instrukcije 'make', kreirane su i ciljna i objektna datoteka. Nakon izvršavanja izvršne datoteke 'hello', od korisnika se traži da unese plaću, a mi dodajemo '67000'. Na kraju se ispisuje plaća.

napraviti

Primjer 2: Korištenje Foreach-a

Nakon korištenja zamjenskih znakova, vrijeme je da upotrijebite funkciju foreach u makefileu. Ostatak makefile koda je isti. U retku 6 inicijaliziramo drugu varijablu koja je 'NAMES' s popisom od tri vrijednosti - Kate, Kim, Tim. Zadani cilj 'all' ovisi o varijabli EXECUTABLE (naziv ciljne datoteke 'hello') i foreach iskazu. Funkcija “addprefix” iterira varijablu “NAMES” za dinamičko generiranje ciljnih naziva stavljanjem prefiksa “run_” na početak svakog imena na popisu “NAMES”.

Pravilo u osmoj liniji pokazuje da izlazna izvršna ciljna datoteka, tj. hello, ovisi o 'OBJS'. Oznaka '-o' generira ciljnu izlaznu datoteku koristeći OBJS. Pravilo u desetom retku generira ciljnu objektnu datoteku koristeći izvorne datoteke s ekstenzijom 'cpp'. Da bi se to postiglo, koristi se zastavica “-c” za kompajliranje izvorne datoteke i generiranje povezane objektne datoteke koja je neophodna za ciljno generiranje. U trinaestom redu koristimo varijablu EXECUTABLE za generiranje izlaza s različitim nazivima koji počinju s 'run_' kao prefiksom. Na kraju će čisti cilj i lažni ciljevi ukloniti i očistiti objekt i ciljne datoteke.

CXX = g++
CXXZASTAVE = -Zid -std =c++ jedanaest
# izvršna ciljna datoteka
IZVRŠIV = zdravo
SRCS = $ ( zamjenski znak * .cpp )
OBJS = $ ( SRCS:.cpp=.o )
# Popis imena
IMENA = Kate Kim Tim
# Mete
sve: $ ( IZVRŠIV ) $ ( addprefix run_, $ ( IMENA ) )
$ ( IZVRŠIV ) : $ ( OBJS )
$ ( CXX ) $ ( CXXZASTAVE ) -O $ @ $ ( OBJS )
% .O: % .cpp
$ ( CXX ) $ ( CXXZASTAVE ) -c $ < -O $ @
# Stvorite ciljeve za svako ime
trčanje_ % : $ ( IZVRŠIV )
. / $ ( IZVRŠIV ) $*
čist:
rm -f $ ( IZVRŠIV ) $ ( OBJS )
# Lažne mete
.LAŽNO: sve čisto

Korištenje instrukcije 'make' generira izvršni cilj 'hello' i pokreće program za svako ime navedeno u varijabli 'NAMES'.

napraviti

Također možete izmijeniti svoj izlaz koristeći naziv s popisa s prefiksom 'run_'.

Neka trči_Kim

Zaključak

Ovaj vodič raspravljao je o korištenju zamjenskih znakova i koncepata foreach u make datoteci dok je njihova sintaksa zasebno raspravljala. Nakon toga smo razgovarali o primjerima koda kako bismo razradili svaki od njih kako rade s rezultatima na dobivanju datoteka s istim ekstenzijama i ponavljanju vrijednosti na popisu varijabli.