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ä.
#includekä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.