2008-12-04 4 views

ответ

14

Хотя цель, в конечном счете влияет на значение CFLAGS (как это было предложено @unwind), часто не рекомендуется просто устанавливать значение CFLAGS, поскольку оно часто построенный из многих частей. Вы должны понимать структуру make-файла и набор используемых макросов.

[Добавлено:

Эдуардо спросил: Можете ли вы опубликовать макросы делать то же самое?

Да, но полезны ли они, зависит от того, как структурированы ваши 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} 

Этот файл инструкций для программы шахты под названием sqlcmd (имя выбрано десять лет и больше, прежде чем Microsoft создала команду с одноименным названием). Я предполагаю, что программа make есть правило для компиляции коды C объект, как:

${CC} ${CFLAGS} -c $*.c 

и что правило для связывания программы из набора объектных файлов, перечисленный в макрообъектах выглядит следующим образом:

${CC} ${CFLAGS} -o [email protected] ${OBJECTS} ${LDFLAGS} 

Как вы можете видеть, для ESQLC_VERSION (используемая версия Informix ESQL/C, используемая по умолчанию при запуске скрипта esqlcver) есть отдельные настраиваемые макросы, затем включаются каталоги через INC1 в INC5 и INCFLAGS (там это будет довольно много, в зависимости от платформы) и флаги оптимизатора (OFLAGS), дополнительные флаги (CFLAGS), определяемые пользователем d flags (UFLAGS - идиома, которую я использую в большинстве своих make-файлов; он позволяет пользователю установить UFLAGS в командной строке make и добавить дополнительный флаг в сборку) и кучу связанных с библиотекой макросов. Это то, что требуется для того, чтобы мой make-файл makefile был настроен с минимальной суматохой на мою платформу разработки, которая может быть Linux, Solaris или MacOS X. Для пользователей этой программы существует configure скрипт, созданный autoconf, поэтому они не приходится беспокоиться о правильном использовании этих бит. Однако это имеет сильное генетическое сходство с этим кодом, включая опцию UFLAGS.

Обратите внимание, что многие системы для создания make-файла имеют механизм для установки CFLAGS, слегка похожий на это, и просто назначение CFLAGS отменяет хорошую работу, выполняемую системой. Но вы должны понимать свой make-файл, чтобы иметь возможность модифицировать его.

]

18

по крайней мере, для GNU сделать, попробуйте неявную переменную CFLAGS, как:

CFLAGS=-I/directory/to/add 

 Смежные вопросы

  • Нет связанных вопросов^_^