Caratteri jolly e Foreach nel Makefile

Caratteri Jolly E Foreach Nel Makefile



Un file è sempre costituito da un diverso tipo di contenuto: che si tratti di un semplice file di testo, di un file di codice di programma o di qualsiasi makefile. Il tipo di contenuto di qualsiasi file lo rende unico e lo differenzia dagli altri formati di file. Proprio così, makefile è costituito da regole che utilizzano diversi elementi per svolgere correttamente il proprio lavoro. Da questi elementi, c'è il jolly e foreach necessari per eseguire qualcosa di unico ed extra. All'interno di questa guida discuteremo della potenza dei caratteri jolly e di foreach quando vengono utilizzati in un makefile.

Caratteri jolly nel Makefile

In generale, è noto che il jolly è un fattore che non può essere previsto e che può ribaltare la situazione in ogni modo possibile. I caratteri jolly nel makefile vengono utilizzati per eseguire un bonus di rilevamento di tutti i possibili modelli da una directory di lavoro corrente, sia che si tratti di un file o di qualsiasi cartella. Questi file di origine possono essere di qualsiasi tipo.







Per utilizzare un carattere jolly in un makefile, è necessario utilizzare la parola chiave 'jolly' che segue l'asterisco '*' o '?' segno e l'estensione del file collegato tramite un punto. Puoi anche utilizzare il '?' segno per cercare un singolo carattere e '*' per trovare la corrispondenza con un numero qualsiasi di caratteri. L'intera struttura dovrebbe essere utilizzata tra parentesi e un segno '$'. Ad esempio, dichiariamo la variabile “SRCS” che ottiene il suo file di valore tramite il carattere jolly. Questo carattere jolly cerca tutti i file con il pattern 'cpp' alla fine.





Foreach nel Makefile

La funzione foreach di makefile funziona esattamente come un ciclo foreach nei linguaggi di programmazione: esegue un'iterazione sugli elementi di un elenco. La funzione foreach nel makefile esegue un'azione particolare su ciascun elemento di un elenco. Questo elemento può essere una variabile o qualsiasi file sorgente. Ad esempio, elaboriamo la sintassi della funzione foreach nel makefile tramite la variabile SOURCES che contiene un elenco di tre file sorgente. La funzione foreach utilizza questa variabile SOURCES per creare lo stesso nome per tre file oggetto eseguendo l'iterazione dell'elenco dei file sorgente e salvandoli in un'altra variabile 'OBJECTS'. Le ultime due righe mostrano come è possibile utilizzare una regola makefile per creare un file oggetto per ciascun file C dopo l'iterazione.





FONTI := file1.c file2.c file3.c
OGGETTI := $ ( per ogni src, $ ( FONTI ) ,$ ( src:.c=.o ) )
$OGGETTI : % .O: % .C
$ ( CC ) $ ( FLAG ) -C $ < -O $ @

Esempio 1: utilizzo dei caratteri jolly

Per visualizzare l'illustrazione e il funzionamento dei caratteri jolly e delle funzioni foreach, introduciamo un file C++. Questo file 'salary.cpp' viene avviato con l'uso dell'intestazione 'iostream' per consentire un utilizzo regolare dei flussi di input e output. Il metodo main dichiara una variabile “s” di tipo intero e l'istruzione “cout” per chiedere un valore di input in fase di runtime. Il flusso di input standard 'cin' ottiene il valore da un utente in fase di esecuzione e lo salva nella variabile 's'. Il 'cout' mostra il valore immesso da un utente sullo schermo della console.

#include
utilizzando lo spazio dei nomi std;
int principale ( ) {
int s;
cout << 'Inserisci lo stipendio: ' ;
mangiare >> S;
cout << ' \N Stipendio: ' << S << fine;
ritorno 0 ;
}



Iniziamo il makefile con la variabile 'CXX' che definisce il compilatore per C++ e la variabile CXXFLAGS contiene i flag per il compilatore C++. La variabile EXECUTABLE contiene il nome di un file eseguibile 'ciao' che viene generato dopo l'esecuzione di un makefile. La variabile SRCS ottiene tutti i file C++ da una directory corrente utilizzando il carattere jolly '*' per cercare qualsiasi modello che termina con '.cpp'. La variabile OBJS contiene i nomi dei file oggetto da creare utilizzando la variabile SRCS, sostituendo l'estensione “cpp” con “o”. Il target predefinito 'all' crea il makefile e dipende dalla variabile EXECUTABLE.

La prima regola crea il file 'ciao' di destinazione che dipende dal file oggetto della variabile OBJS (nomi dei file oggetto) utilizzando i nomi file generati tramite la variabile 'OBJS'. La seconda regola makefile genera il file oggetto con l'estensione “.o” che dipende dal file C++ dopo aver compilato il file di codice C++. Qui, “%” è un carattere jolly per cercare i nomi di file di qualsiasi modello che termina con “cpp”. Alla fine, la destinazione pulita utilizza il comando 'rm' per pulire forzatamente i file eseguibili e oggetto appena generati da una directory utilizzando il flag '-f'.

CXX = g++
CXXFLAG = -Parete -std =c++ undici
ESEGUIBILE = ciao
SRCS = $ ( carta jolly * .cpp )
OGG = $ ( SRCS:.cpp=.o )
tutto: $ ( ESEGUIBILE )
$ ( ESEGUIBILE ) : $ ( OBJS )
$ ( CXX ) $ ( CXXFLAG ) -O $ @ $ ( OBJS )
% .O: % .cpp
$ ( CXX ) $ ( CXXFLAG ) -C $ < -O $ @
pulito:
rm -F $ ( ESEGUIBILE ) $ ( OBJS )

Dopo aver eseguito l'istruzione 'make', sono stati creati sia il file di destinazione che quello oggetto. Dopo aver eseguito il file eseguibile “ciao”, all'utente viene chiesto di inserire uno stipendio e noi aggiungiamo “67000”. Alla fine, lo stipendio viene restituito.

Fare

Esempio 2: utilizzo di Foreach

Dopo aver utilizzato i caratteri jolly, è il momento di utilizzare la funzione foreach nel makefile. Il resto del codice makefile è lo stesso. Alla riga 6 inizializziamo un'altra variabile che è 'NAMES' con un elenco di tre valori: Kate, Kim, Tim. La destinazione predefinita 'all' dipende dalla variabile EXECUTABLE (nome file di destinazione 'hello') e dall'istruzione foreach. La funzione 'addprefix' ripete la variabile 'NAMES' per generare dinamicamente i nomi di destinazione anteponendo 'run_' all'inizio di ogni nome nell'elenco 'NAMES'.

La regola sull'ottava riga indica che un file di destinazione eseguibile di output, ad esempio ciao, dipende da 'OBJS'. Il flag '-o' genera il file di output di destinazione utilizzando OBJS. La regola nella decima riga genera il file oggetto di destinazione utilizzando i file sorgente con estensione 'cpp'. Per fare ciò, il flag '-c' viene utilizzato per compilare un file sorgente e generare il relativo file oggetto necessario per la generazione di destinazione. Alla tredicesima riga utilizziamo la variabile EXECUTABLE per generare l'output con nomi diversi che iniziano con 'run_' come prefisso. Alla fine, la destinazione pulita e le destinazioni fasulle rimuoveranno e puliranno l'oggetto e i file di destinazione.

CXX = g++
CXXFLAG = -Parete -std =c++ undici
# file di destinazione eseguibile
ESEGUIBILE = ciao
SRCS = $ ( carta jolly * .cpp )
OGG = $ ( SRCS:.cpp=.o )
# Elenco dei nomi
NOMI = Kate Kim Tim
# Obiettivi
tutto: $ ( ESEGUIBILE ) $ ( aggiungiprefisso esegui_, $ ( NOMI ) )
$ ( ESEGUIBILE ) : $ ( OBJS )
$ ( CXX ) $ ( CXXFLAG ) -O $ @ $ ( OBJS )
% .O: % .cpp
$ ( CXX ) $ ( CXXFLAG ) -C $ < -O $ @
# Crea obiettivi per ciascun nome
correre_ % : $ ( ESEGUIBILE )
. / $ ( ESEGUIBILE ) $*
pulito:
rm -F $ ( ESEGUIBILE ) $ ( OBJS )
# Obiettivi fasulli
.PHONY: tutto pulito

L'uso dell'istruzione 'make' genera l'eseguibile target 'hello' ed esegue il programma per ciascun nome specificato nella variabile 'NAMES'.

Fare

Puoi anche modificare l'output utilizzando il nome da un elenco con il prefisso 'run_'.

Fai correre_Kim

Conclusione

Questa guida ha discusso l'uso dei caratteri jolly e dei concetti foreach nel makefile discutendone separatamente la sintassi. Successivamente, abbiamo discusso gli esempi di codice per approfondire il loro funzionamento con gli output per ottenere file con le stesse estensioni e iterare i valori in un elenco di variabili.