Comodins i Foreach a Makefile

Comodins I Foreach A Makefile



Un fitxer sempre està format per un tipus de contingut diferent: ja sigui un fitxer de text simple, un fitxer de codi de programa o qualsevol fitxer de creació. El tipus de contingut de qualsevol fitxer el fa únic i el diferencia de l'altre format de fitxers. De la mateixa manera, makefile consta de regles que utilitzen diferents elements per realitzar el seu treball correctament. A partir d'aquests elements, hi ha el comodí i el foreach que es requereixen per realitzar alguna cosa únic i addicional. Dins d'aquesta guia, parlarem del poder dels comodins i foreach mentre s'utilitzen en un fitxer makefile.

Comodins a Makefile

En general, se sap que el comodí és un factor que no es pot predir i que pot canviar la situació de qualsevol manera possible. Els comodins del fitxer makefile s'utilitzen per detectar tots els patrons possibles d'un directori de treball actual, ja sigui un fitxer o qualsevol carpeta. Aquests fitxers font poden ser de qualsevol tipus.







Per utilitzar un comodí en un fitxer de creació, hauríeu d'utilitzar la paraula clau 'comodí' que segueix l'asterisc '*' o '?' signe i l'extensió del fitxer que està connectat mitjançant un punt. També podeu utilitzar el '?' signe per cercar un sol caràcter i '*' per fer coincidir qualsevol nombre de caràcters. Tota aquesta estructura s'ha d'utilitzar entre parèntesis i un signe '$'. Per exemple, declarem la variable 'SRCS' que obté el seu fitxer de valors mitjançant el comodí. Aquest comodí cerca tots els fitxers amb el patró 'cpp' al final.





Foreach a Makefile

La funció foreach de makefile funciona exactament com un bucle foreach en llenguatges de programació: itereu sobre els elements d'una llista. La funció foreach de makefile realitza una acció particular en cada element d'una llista. Aquest element pot ser una variable o qualsevol fitxer font. Per exemple, elaborem la sintaxi de la funció foreach al makefile mitjançant la variable SOURCES que conté una llista de tres fitxers font. La funció foreach utilitza aquesta variable SOURCES per crear el mateix nom per a tres fitxers objecte iterant la llista de fitxers font i desant-los en una altra variable 'OBJECTES'. Les dues últimes línies mostren com es pot utilitzar una regla de makefile per crear un fitxer objecte per a cada fitxer C després d'iterar.





FONTS := fitxer1.c fitxer2.c fitxer3.c
OBJECTES := $ ( foreach src,$ ( FONTS ) ,$ ( src:.c=.o ) )
$OBJECTES : % .O: % .c
$ ( CC ) $ ( CFLAGS ) -c $ < -O $ @

Exemple 1: Ús de comodins

Per mostrar la il·lustració i el funcionament dels comodins i de les funcions de cada cas, introduïm un fitxer C++. Aquest fitxer 'salary.cpp' s'inicia amb l'ús de la capçalera 'iostream' per permetre un ús fluid dels fluxos d'entrada i sortida. El mètode principal declara una variable 's' de tipus enter i la instrucció 'cout' per demanar un valor d'entrada en temps d'execució. El flux d'entrada estàndard 'cin' obté el valor d'un usuari en temps d'execució i el desa a la variable 's'. El 'cout' mostra el valor introduït per un usuari a la pantalla de la consola.

#inclou
utilitzant namespace std;
int principal ( ) {
int s;
cout << 'Introdueix el sou:' ;
menjant >> s;
cout << ' \n Sou: ' << s << endl;
tornar 0 ;
}



Iniciem el makefile amb la variable 'CXX' que defineix el compilador per a C++, i la variable CXXFLAGS conté els indicadors per al compilador C++. La variable EXECUTABLE conté el nom d'un fitxer executable 'hola' que es genera després de l'execució d'un fitxer makefile. La variable SRCS obté tots els fitxers C++ d'un directori actual utilitzant el comodí '*' per cercar qualsevol patró que acabi amb '.cpp'. La variable OBJS conté els noms dels fitxers d'objectes que s'han de crear mitjançant la variable SRCS, substituint l'extensió 'cpp' per 'o'. L'objectiu per defecte 'tot' crea el fitxer makefile i depèn de la variable EXECUTABLE.

La primera regla crea el fitxer 'hola' de destinació que depèn del fitxer d'objecte de la variable OBJS (noms dels fitxers d'objecte) utilitzant els noms de fitxer que es generen mitjançant la variable 'OBJS'. La segona regla de makefile genera el fitxer objecte amb l'extensió '.o' que depèn del fitxer C++ després de compilar el fitxer de codi C++. Aquí, '%' és un comodí per cercar els noms de fitxer de qualsevol patró que acabi amb 'cpp'. Al final, l'objectiu net utilitza la seva ordre 'rm' per netejar amb força els fitxers executables i objectes generats recentment des d'un directori utilitzant el senyalador '-f'.

CXX = g++
CXXFLAGS = - Paret -std =c++ 11
EXECUTABLE = hola
SRCS = $ ( comodí * .cpp )
OBJS = $ ( SRCS:.cpp=.o )
tots: $ ( EXECUTABLE )
$ ( EXECUTABLE ) : $ ( OBJS )
$ ( CXX ) $ ( CXXFLAGS ) -O $ @ $ ( OBJS )
% .O: % .cpp
$ ( CXX ) $ ( CXXFLAGS ) -c $ < -O $ @
net:
rm -f $ ( EXECUTABLE ) $ ( OBJS )

En executar la instrucció 'make', es van crear tant els fitxers de destinació com els objecte. Després d'executar el fitxer executable 'hola', es demana a l'usuari que introdueixi un sou i afegim '67000'. Al final, es mostra el sou.

fer

Exemple 2: Ús de Foreach

Després d'utilitzar els comodins, és hora de fer ús de la funció foreach a makefile. La resta del codi makefile és el mateix. A la línia 6, inicialitzem una altra variable que és 'NOMS' amb una llista de tres valors: Kate, Kim, Tim. L'objectiu 'tot' per defecte depèn de la variable EXECUTABLE (nom del fitxer de destinació 'hola') i de la instrucció foreach. La funció 'addprefix' itera la variable 'NAMES' per generar dinàmicament els noms de destinació prefixant 'run_' al començament de cada nom de la llista 'NAMES'.

La regla de la vuitena línia indica que un fitxer de destinació executable de sortida, és a dir, hola, depèn de l''OBJS'. El senyalador '-o' genera el fitxer de sortida de destinació mitjançant l'OBJS. La regla de la desena línia genera el fitxer objecte de destinació utilitzant els fitxers font amb l'extensió 'cpp'. Per fer-ho, s'utilitza el senyalador '-c' per compilar un fitxer font i generar el fitxer objecte relacionat que és necessari per a la generació de destinació. A la tretzena línia, fem servir la variable EXECUTABLE per generar la sortida amb diferents noms que comencen per 'run_' com a prefix. Al final, l'objectiu net i els objectius falsos eliminaran i netejaran l'objecte i els fitxers de destinació.

CXX = g++
CXXFLAGS = - Paret -std =c++ 11
# fitxer de destinació executable
EXECUTABLE = hola
SRCS = $ ( comodí * .cpp )
OBJS = $ ( SRCS:.cpp=.o )
# Llista de noms
NOMS = Kate Kim Tim
# Objectius
tots: $ ( EXECUTABLE ) $ ( addprefix run_, $ ( NOMS ) )
$ ( EXECUTABLE ) : $ ( OBJS )
$ ( CXX ) $ ( CXXFLAGS ) -O $ @ $ ( OBJS )
% .O: % .cpp
$ ( CXX ) $ ( CXXFLAGS ) -c $ < -O $ @
# Creeu objectius per a cada nom
correr_ % : $ ( EXECUTABLE )
. / $ ( EXECUTABLE ) $*
net:
rm -f $ ( EXECUTABLE ) $ ( OBJS )
# Objectius falsos
.FONIA: tot net

L'ús de la instrucció 'make' genera l'objectiu executable 'hola' i executa el programa per a cada nom que s'especifica a la variable 'NAMES'.

fer

També podeu modificar la vostra sortida utilitzant el nom d'una llista amb el prefix 'run_'.

Fes córrer_Kim

Conclusió

Aquesta guia parlava de l'ús de comodins i conceptes foreach al makefile mentre es parlava de la seva sintaxi per separat. Després d'això, vam discutir els exemples de codi per elaborar cadascun dels seus treballs amb sortides per obtenir els fitxers amb les mateixes extensions i iterar els valors en una llista de variables.