Bien que l'objectif ultime est d'affecter la valeur de CFLAGS (comme le suggère @unwind), il n'est souvent pas judicieux de définir simplement la valeur de CFLAGS dix construit de nombreuses pièces. Vous devez comprendre la structure du makefile et l'ensemble des macros utilisées.
[Ajouté:
Eduardo a demandé: Pouvez-vous poster des macros pour faire la même chose?
Oui, mais leur utilité dépend de la structure de vos fichiers makefiles. Voici un exemple modérément complexe d'un de mes makefiles.
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}
Ce makefile pour un programme appelé de mes sqlcmd
(un nom choisi une dizaine d'années et plus avant que Microsoft a créé une commande du même nom). Je suppose que le programme make
a une règle pour la compilation du code C pour objet comme:
${CC} ${CFLAGS} -c $*.c
et que la règle pour relier un programme à partir d'un ensemble de fichiers d'objets répertoriés dans les objets macro ressemble à:
${CC} ${CFLAGS} -o [email protected] ${OBJECTS} ${LDFLAGS}
Comme vous pouvez le voir, il existe des macros paramétrables séparément pour ESQLC_VERSION (la version d'Informix ESQL/C utilisée, dérivée par défaut en exécutant un script esqlcver
), puis les répertoires include via INC1 à INC5 et INCFLAGS (il peut y avoir être beaucoup de ceux-ci, selon la plate-forme), et les indicateurs d'optimiseur (OFLAGS), les drapeaux supplémentaires (CFLAGS), définis par l'utilisateur ed flags (UFLAGS - un idiome que j'utilise dans la plupart de mes makefiles; il permet à l'utilisateur de définir UFLAGS sur la ligne de commande make
et ajouter un drapeau supplémentaire à la construction), et un tas de macros liées à la bibliothèque. C'est ce qu'il faut pour que mon makefile de développement soit ajustable avec un minimum d'effort sur ma plateforme de développement, qui peut être Linux, Solaris ou MacOS X. Pour les utilisateurs du programme, il y a un configure
généré par autoconf
, donc ils ne le font pas avoir à s'inquiéter d'obtenir ces bits à droite. Cependant, cela a une forte ressemblance génétique avec ce code, y compris l'option UFLAGS.
Notez que de nombreux systèmes pour la construction de fichier makefile ont un mécanisme pour paramétrer CFLAGS légèrement similaire à ceci - et simplement assigner à CFLAGS annule le bon travail effectué par le système. Mais vous devez comprendre votre makefile pour pouvoir le modifier sainement.
]