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