Makefile - Otras características
En este capítulo, veremos otras características de Makefile.
Uso recursivo de Make
Uso recursivo de make significa usar makecomo un comando en un archivo MAKE. Esta técnica es útil cuando desea archivos MAKE separados para varios subsistemas que componen un sistema más grande. Por ejemplo, suponga que tiene un subdirectorio llamado `subdir 'que tiene su propio archivo MAKE, y le gustaría que se ejecute el archivo MAKE del directorio que lo contiene.makeen el subdirectorio. Puede hacerlo escribiendo el siguiente código:
subsystem:
cd subdir && $(MAKE)
or, equivalently:
subsystem:
$(MAKE) -C subdir
Puedes escribir recursivo makecomandos simplemente copiando este ejemplo. Sin embargo, necesita saber cómo funcionan y por qué, y cómo se relaciona la sub-marca con la marca de nivel superior.
Comunicación de variables a una submarca
Valores variables del nivel superior makese puede pasar a la sub-marca a través del entorno mediante solicitud explícita. Estas variables se definen en la sub-marca como predeterminadas. No puede anular lo que se especifica en el archivo MAKE usado por el archivo MAKE de sub-make a menos que use la opción -e.
Para transmitir o exportar una variable, makeagrega la variable y su valor al entorno para ejecutar cada comando. La sub-marca, a su vez, usa el entorno para inicializar su tabla de valores de variables.
Las variables especiales SHELL y MAKEFLAGS siempre se exportan (a menos que las anule la exportación). MAKEFILES se exporta si lo configura en algo.
Si desea exportar variables específicas a una sub-marca, use la directiva de exportación, como se muestra a continuación:
export variable ...
Si desea evitar que se exporte una variable, use la directiva no exportar, como se muestra a continuación:
unexport variable ...
Los MAKEFILES variables
Si se define la variable de entorno MAKEFILES, makeconsidera su valor como una lista de nombres (separados por espacios en blanco) de archivos MAKE adicionales para ser leídos antes que los demás. Esto funciona de manera muy similar a la directiva include: se buscan esos archivos en varios directorios.
El uso principal de MAKEFILES es en la comunicación entre invocaciones recursivas del make.
Incluyendo archivo de encabezado de diferentes directorios
Si ha colocado los archivos de encabezado en diferentes directorios y está ejecutando makeen un directorio diferente, es necesario proporcionar la ruta de los archivos de encabezado. Esto se puede hacer usando la opción -I en makefile. Suponiendo que el archivo functions.h está disponible en la carpeta / home / tutorialspoint / header y el resto de los archivos están disponibles en la carpeta / home / tutorialspoint / src /, entonces el archivo MAKE se escribiría de la siguiente manera:
INCLUDES = -I "/home/tutorialspoint/header"
CC = gcc
LIBS = -lm
CFLAGS = -g -Wall
OBJ = main.o factorial.o hello.o
hello: ${OBJ}
${CC} ${CFLAGS} ${INCLUDES} -o [email protected] ${OBJS} ${LIBS}
.cpp.o:
${CC} ${CFLAGS} ${INCLUDES} -c $<
Agregar más texto a las variables
A menudo es útil agregar más texto al valor de una variable ya definida. Haga esto con una línea que contenga '+ =', como se muestra -
objects += another.o
Toma el valor de los objetos variables y le agrega el texto `otro.o ', precedido por un solo espacio como se muestra a continuación.
objects = main.o hello.o factorial.o
objects += another.o
El código anterior establece los objetos en `main.o hello.o factorial.o another.o '.
Usar '+ =' es similar a:
objects = main.o hello.o factorial.o
objects := $(objects) another.o
Línea de continuación en Makefile
Si no le gustan las líneas demasiado grandes en su Makefile, entonces puede romper su línea usando una barra invertida "\" como se muestra a continuación -
OBJ = main.o factorial.o \
hello.o
is equivalent to
OBJ = main.o factorial.o hello.o
Ejecutar Makefile desde el símbolo del sistema
Si ha preparado el archivo Makefile con el nombre "Makefile", simplemente escriba make en el símbolo del sistema y se ejecutará el archivo Makefile. Pero si le ha dado otro nombre al Makefile, utilice el siguiente comando:
make -f your-makefile-name