Aunque la meta es en última instancia a afectar al valor de CFLAGS (como lo sugiere @unwind), a menudo no es una buena idea simplemente establecer el valor de CFLAGS, ya que es de diez construidos a partir de muchas piezas. Debe comprender la estructura del archivo MAKE y el conjunto de macros utilizado.
[ Agregado:
Eduardo preguntó: ¿Puede usted fijar macros para hacer lo mismo?
Sí, pero si son útiles depende de cómo estén estructurados sus archivos MAKE. Aquí hay un ejemplo moderadamente complejo de uno de mis archivos MAKE.
CC = gcc -g
XFLAGS = -Wall -Wshadow -Wstrict-prototypes -Wmissing-prototypes \
-DDEBUG -Wredundant-decls
#CC = cc -g
#XFLAGS =
UFLAGS = # Always overrideable on the command line
DEPEND.mk = sqlcmd-depend.mk
INSTALL.mk = sqlcmd-install.mk
ESQLC_VERSION = `esqlcver`
OFLAGS = # -DDEBUG_MALLOC -g
OFLAGS = -g -DDEBUG -O4
PFLAGS = -DHAVE_CONFIG_H
OFILES.o = # rfnmanip.o # malloc.o # strdup.o # memmove.o
VERSION = -DESQLC_VERSION=${ESQLC_VERSION}
#INC1 = <defined in sqlcmd-depend.mk>
#INC2 = <defined in sqlcmd-depend.mk>
INC3 = /usr/gnu/include
INC4 = ${INFORMIXDIR}/incl/esql
INC5 = . #${INFORMIXDIR}/incl
INCDIRS = -I${INC3} -I${INC1} -I${INC2} -I${INC4} -I${INC5}
LIBSQLCMD = libsqlcmd.a
STRIP = #-s
LIBC = #-lc_s
LIBMALLOC = #-lefence
LIBRDLN = -lreadline
LIBCURSES = -lcurses
LIBPOSIX4 = -lposix4
LIBG = #-lg
LIBDIR1 = ${HOME}/lib
LIBDIR2 = /usr/gnu/lib
LIBJL1 = ${LIBDIR1}/libjl.a
LIBJL2 = ${LIBDIR1}/libjlss-${ESQLC_VERSION}.a
LIBTOOLS = ${LIBJL2} ${LIBJL1}
LDFLAGS = ${LIBSQLCMD} ${LIBTOOLS} -L${LIBDIR2} ${LIBG} ${LIBMALLOC} \
${LIBPOSIX4} ${LIBC} ${STRIP}
CFLAGS = ${VERSION} ${INCDIRS} ${OFLAGS} ${XFLAGS} ${PFLAGS} ${UFLAGS}
Esta un makefile para un programa de mina llamada sqlcmd
(un nombre elegido más de una década antes de que Microsoft creó un comando del mismo nombre). Asumo que el programa make
tiene una regla para compilar código C a objeto como:
${CC} ${CFLAGS} -c $*.c
y que la regla para vincular un programa desde un conjunto de archivos de objetos enumerados en los macro objetos se parece a:
${CC} ${CFLAGS} -o [email protected] ${OBJECTS} ${LDFLAGS}
Como puede ver, hay macros configurables por separado para ESQLC_VERSION (la versión de Informix ESQL/C en uso, derivada por defecto al ejecutar un script esqlcver
), luego los directorios de inclusión a través de INC1 a INC5 e INCFLAGS (no puede muchos de estos, dependiendo de la plataforma), y banderas del optimizador (OFLAGS), banderas adicionales (CFLAGS), definición del usuario banderas ed (UFLAGS - un modismo que uso en la mayoría de mis makefiles; permite al usuario configurar UFLAGS en la línea de comando make
y agregar un indicador adicional a la compilación) y un conjunto de macros relacionadas con la biblioteca. Esto es lo que se necesita para que mi archivo de desarrollo se pueda ajustar con un mínimo esfuerzo a mi plataforma de desarrollo, que puede ser Linux, Solaris o MacOS X. Para los consumidores del programa, existe un script configure
generado por autoconf
, por lo que no tiene que preocuparse por obtener esos bits correctos. Sin embargo, tiene un gran parecido genético con este código, incluida la opción UFLAGS.
Tenga en cuenta que muchos sistemas para la construcción de archivos MAKE tienen un mecanismo para configurar CFLAGS débilmente similar a este - y simplemente asignar a CFLAGS deshace el buen trabajo realizado por el sistema. Pero debes entender tu archivo MAKE para poder modificarlo sanamente.
]