Jokerimerkit ja Foreach Makefilessa

Jokerimerkit Ja Foreach Makefilessa



Tiedosto koostuu aina erityyppisestä sisällöstä: olipa se sitten yksinkertainen tekstitiedosto, ohjelmakooditiedosto tai mikä tahansa makefile. Minkä tahansa tiedoston sisältötyyppi tekee siitä ainutlaatuisen ja erottaa sen muista tiedostomuodoista. Juuri näin, makefile koostuu säännöistä, jotka käyttävät erilaisia ​​​​elementtejä suorittaakseen työnsä oikein. Näistä elementeistä on jokerimerkki ja foreach, jotka vaaditaan suorittamaan jotain ainutlaatuista ja ylimääräistä. Tässä oppaassa käsittelemme jokerimerkkien ja foreachin voimaa, kun niitä käytetään make-tiedostossa.

Jokerimerkit Makefilessa

Yleisesti ottaen jokerimerkki tiedetään olevan tekijä, jota ei voida ennustaa ja joka voi kääntää tilanteen kaikin mahdollisin tavoin. Makefile-tiedoston yleismerkkejä käytetään bonuksena kaikkien mahdollisten kuvioiden havaitsemiseen nykyisestä työhakemistosta, olipa kyseessä tiedosto tai mikä tahansa kansio. Nämä lähdetiedostot voivat olla minkä tyyppisiä tahansa.







Jos haluat käyttää jokerimerkkiä make-tiedostossa, sinun tulee käyttää 'wildcard'-avainsanaa, joka seuraa tähtimerkkiä '*' tai '?' merkki ja tiedostopääte, joka on yhdistetty pisteen kautta. Voit myös käyttää '?' merkki hakeaksesi yhtä merkkiä ja “*” vastaamaan mitä tahansa merkkiä. Tätä koko rakennetta tulee käyttää suluissa ja '$' -merkissä. Ilmoitamme esimerkiksi 'SRCS'-muuttujan, joka saa arvotiedostonsa jokerimerkin kautta. Tämä yleismerkki etsii kaikkia tiedostoja, joiden lopussa on 'cpp'-kuvio.





Foreach Makefilessa

Makefilen foreach-funktio toimii täsmälleen kuten foreach-silmukka ohjelmointikielissä – iteroi luettelon kohteet. Makefilen foreach-toiminto suorittaa tietyn toiminnon jokaiselle luettelon kohteelle. Tämä elementti voi olla muuttuja tai mikä tahansa lähdetiedosto. Esimerkiksi, kehitämme makefile-tiedoston foreach-funktion syntaksia SOURCES-muuttujan kautta, joka sisältää luettelon kolmesta lähdetiedostosta. Foreach-funktio käyttää tätä SOURCES-muuttujaa luodakseen saman nimen kolmelle objektitiedostolle iteroimalla lähdetiedostojen luetteloa ja tallentamalla ne toiseen 'OBJECTS'-muuttujaan. Kaksi viimeistä riviä osoittavat, kuinka makefile-sääntöä voidaan käyttää objektitiedoston luomiseen kullekin C-tiedostolle iteroinnin jälkeen.





LÄHTEET := tiedosto1.c tiedosto2.c tiedosto3.c
OBJEKTIT := $ ( foreach src,$ ( LÄHTEET ) ,$ ( src:.c=.o ) )
$OBJECTS : % .O: % .c
$ ( CC ) $ ( LIPUT ) -c $ < -O $ @

Esimerkki 1: Jokerimerkkien käyttö

Esittelemme C++-tiedoston, jotta voit näyttää yleismerkkien ja foreach-funktioiden kuvauksen ja toiminnan. Tämä 'salary.cpp'-tiedosto käynnistetään käyttämällä 'iostream'-otsikkoa, mikä mahdollistaa syöttö- ja lähtövirtojen sujuvan käytön. Päämenetelmä ilmoittaa kokonaislukutyyppisen muuttujan 's' ja 'cout'-käskyn pyytääkseen syötearvoa ajon aikana. 'Cin'-standardisyöttövirta saa arvon käyttäjältä ajon aikana ja tallentaa sen muuttujaan 's'. 'Cout' näyttää käyttäjän syöttämän arvon konsolin näytöllä.

#include
käyttäen nimiavaruutta std;
int main ( ) {
int s;
cout << 'Syötä palkka:' ;
syöminen >> s;
cout << ' \n Palkka: ' << s << endl;
palata 0 ;
}



Aloitamme makefile muuttujalla 'CXX', joka määrittää C++-kääntäjän, ja CXXFLAGS-muuttuja sisältää C++-kääntäjän liput. EXECUTABLE-muuttuja sisältää suoritettavan 'hello'-tiedoston nimen, joka luodaan make-tiedoston suorittamisen jälkeen. SRCS-muuttuja hakee kaikki C++-tiedostot nykyisestä hakemistosta käyttämällä yleismerkkiä '*' etsiäkseen mitä tahansa mallia, joka päättyy '.cpp'. OBJS-muuttuja sisältää SRCS-muuttujan avulla luotavien objektitiedostojen nimet ja korvaa 'cpp'-tunnisteen 'o':lla. Oletusarvoinen 'kaikki' kohde rakentaa make-tiedoston ja se riippuu EXECUTABLE-muuttujasta.

Ensimmäinen sääntö luo kohdetiedoston 'hello', joka riippuu OBJS-muuttujan (objektitiedostojen nimet) objektitiedostosta käyttämällä 'OBJS'-muuttujan kautta luotuja tiedostonimiä. Toinen makefile-sääntö luo C++-kooditiedoston kääntämisen jälkeen objektitiedoston '.o'-tunnisteella, joka riippuu C++-tiedostosta. Tässä '%' on jokerimerkki minkä tahansa mallin tiedostonimien etsimiseen, jotka päättyvät 'cpp'. Lopulta puhdas kohde käyttää 'rm'-komentoaan väkisin puhdistaakseen juuri luodut suoritettavat tiedostot ja objektitiedostot hakemistosta '-f'-lipulla.

CXX = g++
CXXFLAGS = - Seinä -std =c++ yksitoista
SUORITTAVA = hei
SRCS = $ ( jokerimerkki * .cpp )
OBJS = $ ( SRCS:.cpp=.o )
kaikki: $ ( SUORITTAVA )
$ ( SUORITTAVA ) : $ ( OBJS )
$ ( CXX ) $ ( CXXFLAGS ) -O $ @ $ ( OBJS )
% .O: % .cpp
$ ( CXX ) $ ( CXXFLAGS ) -c $ < -O $ @
puhdas:
rm -f $ ( SUORITTAVA ) $ ( OBJS )

'Make'-käskyn suorittamisen jälkeen luotiin sekä kohde- että kohdetiedostot. Kun suoritettava 'hello'-tiedosto on suoritettu, käyttäjää pyydetään syöttämään palkka ja lisäämme '67000'. Lopussa palkka näytetään takaisin.

tehdä

Esimerkki 2: Foreachin käyttö

Jokerimerkkien käytön jälkeen on aika käyttää foreach-toimintoa makefilessa. Muu makefile-koodi on sama. Rivillä 6 alustamme toisen muuttujan, joka on 'NAMES' kolmen arvon luettelolla - Kate, Kim, Tim. Oletusarvo 'kaikki' riippuu EXECUTABLE-muuttujasta (kohdetiedoston nimi 'hello') ja foreach-lauseesta. 'addprefix'-funktio iteroi 'NAMES'-muuttujan luomaan kohdenimet dynaamisesti lisäämällä 'run_' jokaisen nimen alkuun 'NAMES'-luettelossa.

Kahdeksan rivin sääntö osoittaa, että suoritettava kohdetiedosto, eli hello, on riippuvainen 'OBJS:stä'. Lippu '-o' luo kohdetulostustiedoston OBJS:n avulla. Kymmenennellä rivillä oleva sääntö luo kohdeobjektitiedoston käyttämällä lähdetiedostoja, joiden tunniste on 'cpp'. Tätä varten käytetään '-c'-lippua lähdetiedoston kääntämiseen ja siihen liittyvän objektitiedoston luomiseen, joka on tarpeen kohdesukupolvea varten. Kolmannellatoista rivillä käytämme EXECUTABLE-muuttujaa tulosteen luomiseen eri nimillä, jotka alkavat 'run_' etuliitteenä. Lopulta puhdas kohde ja Phony-kohteet poistavat ja puhdistavat objekti- ja kohdetiedostot.

CXX = g++
CXXFLAGS = - Seinä -std =c++ yksitoista
# suoritettava kohdetiedosto
SUORITTAVA = hei
SRCS = $ ( jokerimerkki * .cpp )
OBJS = $ ( SRCS:.cpp=.o )
# Luettelo nimistä
NIMET = Kate Kim Tim
# Tavoitteet
kaikki: $ ( SUORITTAVA ) $ ( addprefix run_, $ ( NIMET ) )
$ ( SUORITTAVA ) : $ ( OBJS )
$ ( CXX ) $ ( CXXFLAGS ) -O $ @ $ ( OBJS )
% .O: % .cpp
$ ( CXX ) $ ( CXXFLAGS ) -c $ < -O $ @
# Luo tavoitteet jokaiselle nimelle
juosta_ % : $ ( SUORITTAVA )
. / $ ( SUORITTAVA ) $*
puhdas:
rm -f $ ( SUORITTAVA ) $ ( OBJS )
# Valheelliset maalit
.PHONY: kaikki puhdas

'make'-käskyn käyttö luo suoritettavan 'hello'-kohteen ja suorittaa ohjelman jokaiselle 'NAMES'-muuttujassa määritetylle nimelle.

tehdä

Voit myös muokata tulosta käyttämällä nimeä luettelosta, jossa on 'run_'-etuliite.

Tee run_Kim

Johtopäätös

Tässä oppaassa käsiteltiin jokerimerkkien ja foreach-käsitteiden käyttöä make-tiedostossa ja käsiteltiin niiden syntaksia erikseen. Sen jälkeen keskustelimme koodiesimerkeistä selvittääksemme, miten jokainen niistä työskentelee tulosten kanssa samoilla tiedostotunnisteilla varustettujen tiedostojen hankkimiseksi ja arvojen iteroimiseksi muuttujaluettelossa.