Helyettesítő karakterek és Foreach a Makefile-ban

Helyettesito Karakterek Es Foreach A Makefile Ban



Egy fájl mindig más típusú tartalomból áll: legyen az egyszerű szövegfájl, programkódfájl vagy bármilyen makefile. Bármely fájl tartalomtípusa egyedivé teszi, és megkülönbözteti a többi fájlformátumtól. Hasonlóképpen, a makefile olyan szabályokból áll, amelyek különböző elemeket használnak a munka megfelelő végrehajtásához. Ezekből az elemekből ott van a helyettesítő karakter és a foreach, amelyek valami egyedi és extra teljesítményhez szükségesek. Ebben az útmutatóban megvitatjuk a helyettesítő karakterek és a foreach erejét, miközben makefile-ben használják őket.

Helyettesítő karakterek a Makefile-ban

Általánosságban elmondható, hogy a helyettesítő karakter olyan tényező, amelyet nem lehet előre megjósolni, és bármilyen módon megváltoztathatja a helyzetet. A makefile-ban lévő helyettesítő karakterek egy bónuszként használhatók, hogy az összes lehetséges mintát észleljék egy aktuális munkakönyvtárból, legyen szó fájlról vagy bármilyen mappáról. Ezek a forrásfájlok bármilyen típusúak lehetnek.







Ha helyettesítő karaktert szeretne használni egy makefile-ban, akkor használja a „wildcard” kulcsszót, amely a „*” vagy „?” csillagot követi. jelet és a ponton keresztül összekapcsolt fájlkiterjesztést. Használhatja a „?” jel, ha egyetlen karaktert keres, a „*” pedig tetszőleges számú karaktert. Ezt az egész szerkezetet a zárójelben és egy „$” jelben kell használni. Például deklaráljuk az „SRCS” változót, amely a helyettesítő karakteren keresztül kapja meg az értékfájlt. Ez a helyettesítő karakter minden olyan fájlt keres, amelynek végén a „cpp” minta található.





Foreach a Makefile-ban

A makefile foreach funkciója pontosan úgy működik, mint a foreach ciklus a programozási nyelvekben – iteráljon a lista elemei között. A makefile foreach függvénye egy adott műveletet hajt végre a lista minden elemén. Ez az elem lehet változó vagy bármilyen forrásfájl. Például a makefile foreach függvényének szintaxisát a SOURCES változón keresztül dolgozzuk ki, amely három forrásfájlt tartalmaz. A foreach függvény ezt a SOURCES változót használja, hogy ugyanazt a nevet hozza létre három objektumfájl számára a forrásfájlok listájának iterálásával és egy másik „OBJECTS” változóba való mentésével. Az utolsó két sor azt mutatja, hogyan lehet egy makefile szabályt használni objektumfájl létrehozására minden C fájlhoz az iteráció után.





FORRÁSOK := fájl1.c fájl2.c fájl3.c
OBJEKTUMOK := $ ( foreach src,$ ( FORRÁSOK ) ,$ ( src:.c=.o ) )
$OBJECTS : % .O: % .c
$ ( CC ) $ ( CFLAGS ) -c $ < -O $ @

1. példa: Helyettesítő karakterek használata

A helyettesítő karakterek és a foreach függvények illusztrációjának és működésének megjelenítéséhez bemutatunk egy C++ fájlt. Ez a „salary.cpp” fájl az „iostream” fejléc használatával indul, amely lehetővé teszi a bemeneti és kimeneti adatfolyamok zökkenőmentes használatát. A fő metódus egy egész típusú „s” változót és a „cout” utasítást deklarál, hogy futás közben bemeneti értéket kérjen. A „cin” szabványos bemeneti adatfolyam futás közben kapja meg az értéket a felhasználótól, és elmenti az „s” változóba. A „cout” a felhasználó által bevitt értéket jeleníti meg a konzol képernyőjén.

#include
névtér használata std;
int fő ( ) {
int s;
cout << 'Adja meg a fizetést:' ;
enni >> s;
cout << ' \n Fizetés: ' << s << endl;
Visszatérés 0 ;
}



A makefile-t a „CXX” változóval indítjuk, amely a C++ fordítóját határozza meg, a CXXFLAGS változó pedig a C++ fordító jelzőit tartalmazza. Az EXECUTABLE változó egy végrehajtható „hello” fájl nevét tartalmazza, amely egy makefile végrehajtása után jön létre. Az SRCS változó lekéri az összes C++ fájlt az aktuális könyvtárból a „*” helyettesítő karakter használatával a „.cpp”-re végződő minták kereséséhez. Az OBJS változó tartalmazza az SRCS változóval létrehozandó objektumfájlok nevét, a „cpp” kiterjesztést „o”-ra cserélve. Az alapértelmezett „all” cél létrehozza a makefile-t, és ez az EXECUTABLE változótól függ.

Az első szabály létrehozza a cél „hello” fájlt, amely az OBJS változótól (objektumfájlok neveitől) függ, az „OBJS” változó által generált fájlnevek használatával. A második makefile szabály a C++ kódfájl fordítása után a C++ fájltól függő „.o” kiterjesztésű objektumfájlt állít elő. Itt a „%” helyettesítő karakter a „cpp”-re végződő minták fájlneveinek keresésére. Végül a tiszta cél az „rm” parancsot használja az újonnan generált végrehajtható és objektumfájlok kényszerítésére a könyvtárból a „-f” jelzővel.

CXX = g++
CXXFLAGS = -Fal -std =c++ tizenegy
VÉGREHAJTHATÓ = helló
SRCS = $ ( helyettesítő karakter * .cpp )
OBJS = $ ( SRCS:.cpp=.o )
mind: $ ( VÉGREHAJTHATÓ )
$ ( VÉGREHAJTHATÓ ) : $ ( OBJS )
$ ( évi CXX ) $ ( CXXFLAGS ) -O $ @ $ ( OBJS )
% .O: % .cpp
$ ( évi CXX ) $ ( CXXFLAGS ) -c $ < -O $ @
tiszta:
rm -f $ ( VÉGREHAJTHATÓ ) $ ( OBJS )

A „make” utasítás futtatásakor mind a cél-, mind az objektumfájl létrejött. A futtatható „hello” fájl végrehajtása után a felhasználót felkérik a fizetés megadására, és hozzáadjuk a „67000”-et. A végén megjelenik a fizetés.

készítsenek

2. példa: A Foreach használata

A helyettesítő karakterek használata után ideje használni a foreach funkciót a makefile-ban. A makefile kód többi része ugyanaz. A 6. sorban inicializálunk egy másik változót, amely a „NAMES” egy három értékből álló listával – Kate, Kim, Tim. Az alapértelmezett „all” cél az EXECUTABLE változótól (a célfájl neve „hello”) és a foreach utasítástól függ. Az „addprefix” függvény a „NAMES” változót iterálja, hogy dinamikusan generálja a célneveket a „run_” előtaggal minden név elején a „NAMES” listában.

A nyolcas sorban lévő szabály azt jelzi, hogy a kimeneti végrehajtható célfájl, azaz a hello függ az „OBJS-től”. Az „-o” jelző létrehozza a cél kimeneti fájlt az OBJS segítségével. A tizedik sorban lévő szabály létrehozza a célobjektum fájlt a „cpp” kiterjesztésű forrásfájlok használatával. Ehhez a „-c” jelzőt egy forrásfájl összeállítására és a célgeneráláshoz szükséges kapcsolódó objektumfájl generálására használják. A tizenharmadik sorban az EXECUTABLE változóval állítjuk elő a kimenetet különböző nevekkel, amelyek előtagként „run_”-val kezdődnek. Végül a tiszta cél és a hamis célpontok eltávolítják és megtisztítják az objektum- és célfájlokat.

CXX = g++
CXXFLAGS = -Fal -std =c++ tizenegy
# végrehajtható célfájl
VÉGREHAJTHATÓ = helló
SRCS = $ ( helyettesítő karakter * .cpp )
OBJS = $ ( SRCS:.cpp=.o )
# Névlista
NEVEK = Kate Kim Tim
# Célok
mind: $ ( VÉGREHAJTHATÓ ) $ ( addprefix run_, $ ( NEVEK ) )
$ ( VÉGREHAJTHATÓ ) : $ ( OBJS )
$ ( évi CXX ) $ ( CXXFLAGS ) -O $ @ $ ( OBJS )
% .O: % .cpp
$ ( évi CXX ) $ ( CXXFLAGS ) -c $ < -O $ @
# Hozzon létre célokat minden névhez
fuss_ % : $ ( VÉGREHAJTHATÓ )
. / $ ( VÉGREHAJTHATÓ ) $*
tiszta:
rm -f $ ( VÉGREHAJTHATÓ ) $ ( OBJS )
# Hamis célpontok
.PHONY: minden tiszta

A „make” utasítás használata létrehozza a „hello” végrehajtható célt, és lefuttatja a programot a „NAMES” változóban megadott minden névhez.

készítsenek

A kimenetet a „run_” előtaggal rendelkező listából származó név használatával is módosíthatja.

Legyen run_Kim

Következtetés

Ez az útmutató a helyettesítő karakterek és a foreach fogalmak használatát tárgyalta a makefile-ben, miközben külön tárgyalja a szintaxisukat. Ezt követően megvitattuk a kódpéldákat, hogy kifejtsük, hogyan dolgoznak mindegyik kimenettel az azonos kiterjesztésű fájlok beszerzésére és az értékek változólistában való iterálására.