Zástupné znaky a Foreach v Makefile

Zastupne Znaky A Foreach V Makefile



Soubor se vždy skládá z jiného typu obsahu: ať už jde o jednoduchý textový soubor, soubor programového kódu nebo jakýkoli makefile. Typ obsahu jakéhokoli souboru jej činí jedinečným a odlišuje jej od ostatních formátů souborů. Stejně tak se makefile skládá z pravidel, která ke správnému provádění své práce používají různé prvky. Z těchto prvků jsou zástupné znaky a foreach, které jsou nutné k provedení něčeho jedinečného a extra. V této příručce probereme sílu zástupných znaků a foreach při jejich použití v makefile.

Zástupné znaky v Makefile

Obecně je známo, že zástupný znak je faktorem, který nelze předvídat a může situaci jakýmkoliv způsobem zvrátit. Zástupné znaky v makefile se používají k provedení bonusu detekce všech možných vzorů z aktuálního pracovního adresáře, ať už se jedná o soubor nebo jakoukoli složku. Tyto zdrojové soubory mohou být libovolného typu.







Chcete-li použít zástupný znak v makefile, měli byste použít klíčové slovo „wildcard“, které následuje za hvězdičkou „*“ nebo „?“ a příponu souboru, která je připojena tečkou. Můžete také použít „?“ znak pro vyhledání jednoho znaku a znak „*“ pro vyhledání libovolného počtu znaků. Celá tato struktura by měla být použita v závorkách a znaku „$“. Například deklarujeme proměnnou „SRCS“, která získá svůj soubor hodnot prostřednictvím zástupného znaku. Tento zástupný znak hledá všechny soubory se vzorem „cpp“ na konci.





Foreach v Makefile

Funkce foreach nástroje makefile funguje přesně jako smyčka foreach v programovacích jazycích – iterujte položky v seznamu. Funkce foreach v makefile provádí konkrétní akci u každé položky seznamu. Tímto prvkem může být proměnná nebo libovolný zdrojový soubor. Například vypracujeme syntaxi funkce foreach v makefile pomocí proměnné SOURCES, která obsahuje seznam tří zdrojových souborů. Funkce foreach používá tuto proměnnou SOURCES k vytvoření stejného názvu pro tři objektové soubory iterací seznamu zdrojových souborů a jejich uložením do jiné proměnné „OBJECTS“. Poslední dva řádky ukazují, jak lze použít pravidlo makefile k vytvoření objektového souboru pro každý soubor C po iteraci.





ZDROJE := soubor1.c soubor2.c soubor3.c
PŘEDMĚTY := $ ( foreach src,$ ( PRAMENY ) ,$ ( src:.c=.o ) )
$OBJECTS : % .Ó: % .C
$ ( CC ) $ ( CFLAGS ) -C $ < $ @

Příklad 1: Použití zástupných znaků

Pro zobrazení ilustrace a fungování zástupných znaků a funkcí foreach zavedeme soubor C++. Tento soubor „salary.cpp“ se spouští s použitím hlavičky „iostream“, aby bylo možné plynule využívat vstupní a výstupní proudy. Hlavní metoda deklaruje proměnnou „s“ celočíselného typu a příkaz „cout“, který požaduje vstupní hodnotu za běhu. Standardní vstupní tok „cin“ získá hodnotu od uživatele za běhu a uloží ji do proměnné „s“. „Cout“ zobrazuje hodnotu zadanou uživatelem na obrazovce konzoly.

#include
pomocí jmenného prostoru std;
int main ( ) {
int s;
cout << 'Zadejte plat:' ;
jíst >> s;
cout << ' \n Plat: ' << s << endl;
vrátit se 0 ;
}



Začneme makefile s proměnnou „CXX“, která definuje kompilátor pro C++, a proměnná CXXFLAGS obsahuje příznaky pro kompilátor C++. Proměnná EXECUTABLE obsahuje název spustitelného souboru „ahoj“, který se vygeneruje po spuštění souboru makefile. Proměnná SRCS získá všechny soubory C++ z aktuálního adresáře pomocí zástupného znaku „*“ k vyhledání jakéhokoli vzoru, který končí na „.cpp“. Proměnná OBJS obsahuje názvy souborů objektů, které mají být vytvořeny pomocí proměnné SRCS, přičemž příponu „cpp“ nahrazuje „o“. Výchozí cíl „all“ vytvoří soubor makefile a závisí na proměnné EXECUTABLE.

První pravidlo vytvoří cílový soubor „ahoj“, který závisí na objektovém souboru proměnné OBJS (jména objektových souborů) pomocí názvů souborů, které jsou generovány prostřednictvím proměnné „OBJS“. Druhé pravidlo makefile generuje objektový soubor s příponou „.o“, který závisí na souboru C++ po kompilaci souboru kódu C++. Zde je „%“ zástupný znak pro hledání názvů souborů jakéhokoli vzoru, který končí na „cpp“. Nakonec cíl clean použije svůj příkaz „rm“ k nucenému vyčištění nově vygenerovaných spustitelných souborů a souborů objektů z adresáře pomocí parametru „-f“.

CXX = g++
CXXFLAGS = -Stěna -std =c++ jedenáct
EXECUTABLE = ahoj
SRCS = $ ( divoká karta * .cpp )
OBJS = $ ( SRCS:.cpp=.o )
vše: $ ( EXECUTABLE )
$ ( EXECUTABLE ) : $ ( OBJS )
$ ( CXX ) $ ( CXXFLAGS ) $ @ $ ( OBJS )
% .Ó: % .cpp
$ ( CXX ) $ ( CXXFLAGS ) -C $ < $ @
čistý:
rm -F $ ( EXECUTABLE ) $ ( OBJS )

Po spuštění instrukce „make“ byly vytvořeny cílové i objektové soubory. Po spuštění spustitelného souboru „ahoj“ je uživatel požádán o zadání mzdy a přidáme „67000“. Na konci se mzda zobrazí zpět.

udělat

Příklad 2: Použití Foreach

Po použití zástupných znaků je čas využít funkci foreach v makefile. Zbytek kódu makefile je stejný. Na řádku 6 inicializujeme další proměnnou, která je „NAMES“ se seznamem tří hodnot – Kate, Kim, Tim. Výchozí cíl „all“ závisí na proměnné EXECUTABLE (název cílového souboru „hello“) a na každém příkazu. Funkce „addprefix“ iteruje proměnnou „NAMES“, aby dynamicky generovala názvy cílů přidáním předpony „run_“ na začátek každého jména v seznamu „NAMES“.

Pravidlo na osmém řádku označuje, že výstupní spustitelný cílový soubor, tj. ahoj, je závislý na „OBJS“. Příznak „-o“ generuje cílový výstupní soubor pomocí OBJS. Pravidlo na desátém řádku generuje cílový objektový soubor pomocí zdrojových souborů s příponou „cpp“. K tomu se používá příznak „-c“ ke kompilaci zdrojového souboru a generování souvisejícího objektového souboru, který je nezbytný pro generování cíle. Na třináctém řádku použijeme proměnnou EXECUTABLE k vygenerování výstupu s různými názvy začínajícími na „run_“ jako prefix. Nakonec čistý cíl a falešné cíle odstraní a vyčistí objekt a cílové soubory.

CXX = g++
CXXFLAGS = -Stěna -std =c++ jedenáct
# spustitelný cílový soubor
EXECUTABLE = ahoj
SRCS = $ ( divoká karta * .cpp )
OBJS = $ ( SRCS:.cpp=.o )
# Seznam jmen
JMÉNA = Kate Kim Tim
# Cíle
vše: $ ( EXECUTABLE ) $ ( addprefix run_, $ ( JMÉNA ) )
$ ( EXECUTABLE ) : $ ( OBJS )
$ ( CXX ) $ ( CXXFLAGS ) $ @ $ ( OBJS )
% .Ó: % .cpp
$ ( CXX ) $ ( CXXFLAGS ) -C $ < $ @
# Vytvořte cíle pro každé jméno
běh_ % : $ ( EXECUTABLE )
. / $ ( EXECUTABLE ) $*
čistý:
rm -F $ ( EXECUTABLE ) $ ( OBJS )
# Falešné cíle
.PHONY: vše čisté

Použití instrukce „make“ vygeneruje spustitelný cíl „hello“ a spustí program pro každé jméno, které je zadáno v proměnné „NAMES“.

udělat

Svůj výstup můžete také upravit pomocí názvu ze seznamu s předponou „run_“.

Make run_Kim

Závěr

Tato příručka pojednávala o použití zástupných znaků a pojmů foreach v makefile a probírala přitom jejich syntaxi samostatně. Poté jsme diskutovali o příkladech kódu, abychom propracovali každou z jejich prací s výstupy při získávání souborů se stejnými příponami a iteraci hodnot v seznamu proměnných.