Подтвердить что ты не робот

Добавление каталога для заголовков в Makefile

Здравствуйте, я хотел бы спросить вас: если кто-то знает, как добавить каталог для файлов заголовков в Makefile, чтобы избежать ошибки *.h не найден, я пробовал эту опцию, но не работает:

INC_PATH := -I /directory/to/add
4b9b3361

Ответ 1

Хотя цель, в конечном счете, повлияет на ценность 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}

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

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

и что правило для связывания программы с набором объектных файлов, перечисленных в макрос ОБЪЕКТЫ, выглядит так:

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

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

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

]

Ответ 2

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

CFLAGS=-I/directory/to/add