Makefile - Macros
los makeEl programa le permite utilizar macros, que son similares a las variables. Las macros se definen en un Makefile como = pares. A continuación se muestra un ejemplo:
MACROS = -me
PSROFF = groff -Tps
DITROFF = groff -Tdvi
CFLAGS = -O -systype bsd43
LIBS = "-lncurses -lm -lsdl"
MYFACE = ":*)"
Macros especiales
Antes de emitir cualquier comando en un conjunto de reglas de destino, hay ciertas macros especiales predefinidas:
$ @ es el nombre del archivo que se creará.
PS son los nombres de los dependientes cambiados.
Por ejemplo, podríamos usar una regla de la siguiente manera:
hello: main.cpp hello.cpp factorial.cpp
$(CC) $(CFLAGS) $? $(LDFLAGS) -o [email protected]
Alternatively:
hello: main.cpp hello.cpp factorial.cpp
$(CC) $(CFLAGS) [email protected] $(LDFLAGS) -o [email protected]
En este ejemplo, $ @ representa hola y $? o $ @. cpp recoge todos los archivos fuente modificados.
Hay dos macros especiales más utilizadas en las reglas implícitas. Ellos son -
$ <el nombre del archivo relacionado que provocó la acción.
$ * el prefijo compartido por los archivos de destino y dependientes.
La regla implícita común es para la construcción de archivos .o (objeto) a partir de .cpp (archivos fuente).
.cpp.o:
$(CC) $(CFLAGS) -c $<
Alternatively:
.cpp.o:
$(CC) $(CFLAGS) -c $*.c
Macros convencionales
Hay varias macros predeterminadas. Puede verlos escribiendo "make -p" para imprimir los valores predeterminados. La mayoría son bastante obvias por las reglas en las que se utilizan.
Estas variables predefinidas, es decir, las macros utilizadas en reglas implícitas, se dividen en dos clases. Son los siguientes:
Macros que son nombres de programas (como CC)
Macros que contienen argumentos de los programas (como CFLAGS).
A continuación se muestra una tabla de algunas de las variables comunes que se usan como nombres de programas en las reglas integradas de los archivos MAKE:
No Señor | Variables y descripción |
---|---|
1 | AR Programa de mantenimiento de archivos; el predeterminado es 'ar'. |
2 | AS Programa para compilar archivos de ensamblaje; el valor predeterminado es "como". |
3 |
CC Programa para compilar programas en C; el predeterminado es 'cc'. |
4 |
CO Programa para verificar archivos de RCS; el valor predeterminado es 'co'. |
5 |
CXX Programa para compilar programas C ++; el predeterminado es `g ++ '. |
6 |
CPP Programa para ejecutar el preprocesador C, con resultados para salida estándar; el valor predeterminado es '$ (CC) -E'. |
7 |
FC Programa para compilar o preprocesar programas Fortran y Ratfor; el predeterminado es `f77 '. |
8 |
GET Programa para extraer un archivo de SCCS; el valor predeterminado es "get". |
9 |
LEX Programa a utilizar para convertir las gramáticas Lex en código fuente; el valor predeterminado es `lex '. |
10 |
YACC Programa a utilizar para convertir las gramáticas Yacc en código fuente; el predeterminado es `yacc '. |
11 |
LINT Programa a utilizar para ejecutar lint en el código fuente; el valor predeterminado es "pelusa". |
12 |
M2C Programa a utilizar para compilar código fuente Modula-2; el predeterminado es 'm2c'. |
13 |
PC Programa para compilar programas Pascal; el predeterminado es `pc '. |
14 |
MAKEINFO Programa para convertir un archivo fuente Texinfo en un archivo Info; el predeterminado es `makeinfo '. |
15 |
TEX Programa para crear archivos TeX dvi desde la fuente TeX; por defecto es `tex '. |
dieciséis |
TEXI2DVI Programa para crear archivos TeX dvi desde la fuente Texinfo; el predeterminado es `texi2dvi '. |
17 |
WEAVE Programa para traducir Web a TeX; el valor predeterminado es "tejido". |
18 |
CWEAVE Programa para traducir C Web a TeX; el valor predeterminado es `cweave '. |
19 |
TANGLE Programa para traducir Web a Pascal; el valor predeterminado es "enredo". |
20 |
CTANGLE Programa para traducir C Web a C; el valor predeterminado es "ctangle". |
21 |
RM Comando para eliminar un archivo; el predeterminado es `rm -f '. |
Aquí hay una tabla de variables cuyos valores son argumentos adicionales para los programas anteriores. Los valores predeterminados para todos estos son la cadena vacía, a menos que se indique lo contrario.
No Señor. | Variables y descripción |
---|---|
1 |
ARFLAGS Banderas para dar el programa de mantenimiento de archivos; por defecto es `rv '. |
2 |
ASFLAGS Indicadores adicionales para dar al ensamblador cuando se invoca explícitamente en un archivo '.s' o '.S'. |
3 |
CFLAGS Indicadores adicionales para entregar al compilador de C. |
4 |
CXXFLAGS Indicadores adicionales para entregar al compilador de C. |
5 |
COFLAGS Banderas extra para dar al programa RCS co. |
6 |
CPPFLAGS Indicadores adicionales para entregar al preprocesador de C y a los programas que lo usan (como los compiladores de C y Fortran). |
7 |
FFLAGS Indicadores adicionales para entregar al compilador de Fortran. |
8 |
GFLAGS Banderas adicionales para entregar al programa de obtención de SCCS. |
9 |
LDFLAGS Indicadores adicionales para dar a los compiladores cuando se supone que deben invocar el enlazador, `ld '. |
10 |
LFLAGS Banderas extra para regalar a Lex. |
11 |
YFLAGS Banderas extra para regalar a Yacc. |
12 |
PFLAGS Indicadores adicionales para entregar al compilador de Pascal. |
13 |
RFLAGS Indicadores adicionales para entregar al compilador Fortran para programas Ratfor. |
14 |
LINTFLAGS Banderas extra para dar a la pelusa. |
NOTE - Puede cancelar todas las variables utilizadas por las reglas implícitas con la opción '-R' o '--no-builtin-variables'.
También puede definir macros en la línea de comando como se muestra a continuación:
make CPP = /home/courses/cop4530/spring02