Добавление каталога для заголовков в Make-файле

23
задан mdml 19 June 2014 в 14:55
поделиться

2 ответа

Хотя цель состоит в том, чтобы в конечном счете влиять на значение 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-файл, чтобы быть в состоянии изменить его нормально.

]

15
ответ дан Jonathan Leffler 29 November 2019 в 02:19
поделиться

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

CFLAGS=-I/directory/to/add
21
ответ дан unwind 29 November 2019 в 02:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: