Хотя цель состоит в том, чтобы в конечном счете влиять на значение CFLAGS (как предложено @unwind), это часто - не хорошая идея просто установить значение CFLAGS, поскольку это часто создается из многих частей. Необходимо понять структуру make-файла и набор используемых макросов.
[ Добавленный :
Eduardo спросил: можно ли отправить макросы, чтобы сделать то же?
Да, но полезны ли они, зависит от того, как структурированы Ваши make-файлы. Вот умеренно сложный пример от одного из моих 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}
Это make-файл для моей программы, названной sqlcmd
(имя, выбранное десятилетие и больше прежде чем, Microsoft создала команду того же имени). Я предполагаю, что make
программа имеет правило для компиляции C код для возражения как:
${CC} ${CFLAGS} -c $*.c
и что правило для соединения программы от ряда объектных файлов, перечисленных в макро-ОБЪЕКТАХ, похоже:
${CC} ${CFLAGS} -o $@ ${OBJECTS} ${LDFLAGS}
, Как Вы видите, существуют отдельно устанавливаемые макросы для ESQLC_VERSION (версия ESQL/C Informix, используемого, полученного по умолчанию путем выполнения сценария esqlcver
), тогда включать каталоги через INC1 к INC5 и INCFLAGS (могут быть довольно многие из них, в зависимости от платформы), и флаги оптимизатора (OFLAGS), дополнительные флаги (CFLAGS), пользовательские флаги (UFLAGS - идиома, которую я использую в большинстве своих make-файлов; это позволяет пользователю устанавливать UFLAGS на make
командная строка и добавлять дополнительный флаг к сборке), и набор связанных с библиотекой макросов. Это - то, что это берет для моего make-файла разработки, чтобы быть настраиваемым с минимальной суетой к моей платформе разработки, которая может быть Linux, Солярисом или MacOS X. Для потребителей программы, существует configure
сценарий, сгенерированный autoconf
, таким образом, они не должны волноваться о разбирании в тех битах. Однако это имеет сильное генетическое подобие этому коду, включая опцию UFLAGS.
Примечание, что много систем для здания make-файла имеют механизм для установки CFLAGS, слабо подобной этому - и просто присваивающийся к CFLAGS, отменяет хорошую работу, сделанную системой. Но необходимо понять make-файл, чтобы быть в состоянии изменить его нормально.
]
По крайней мере, для GNU делают, пробуют неявную переменную CFLAGS
, как в:
CFLAGS=-I/directory/to/add