Dodawanie katalogu nagłówków w pliku Makefile

Witam chciałbym zapytać, czy ktoś wie jak Mogę dodać katalog dla plików nagłówkowych w Makefile aby uniknąć błędu *.h nie znaleziono, próbowałem tej opcji, ale nie działa:

INC_PATH := -I /directory/to/add
Author: mdml, 2008-12-04

2 answers

Chociaż celem jest ostatecznie wpływ na wartość CFLAGS( jak sugeruje @unwind), często nie jest dobrym pomysłem, aby po prostu ustawić wartość CFLAGS, ponieważ często jest zbudowany z wielu elementów. Musisz zrozumieć strukturę pliku makefile i zestaw używanych makr.

[dodano :

Eduardo zapytał: czy możesz pisać makra, aby zrobić to samo?

Tak, ale to, czy są one pomocne, zależy od struktury plików Makefile. Oto umiarkowanie złożony przykład z jednego z moich plików Makefile.

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}

To plik makefile dla mojego programu o nazwie sqlcmd (nazwa wybrana dekadę temu i więcej, zanim Microsoft stworzył polecenie o tej samej nazwie). Zakładam, że program make mA regułę kompilowania kodu C do obiektu typu:

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

I że reguła łączenia programu z zestawem plików obiektowych wymienionych w obiektach makro wygląda następująco:

${CC} ${CFLAGS} -o $@ ${OBJECTS} ${LDFLAGS}

Jak widać, istnieją oddzielnie ustawialne makra dla ESQLC_VERSION (the wersja Informix ESQL/C w użyciu, pochodna domyślnie przez uruchomienie skryptu esqlcver), następnie katalogi include przez INC1 do INC5 i INCFLAGS (może być ich sporo, w zależności od platformy), flagi optimizer (OFLAGS), dodatkowe flagi (cflags), flagi zdefiniowane przez użytkownika (UFLAGS-idiom, którego używam w większości moich plików Makefile; pozwala on użytkownikowi ustawić UFLAGS w linii poleceń make i dodać dodatkową flagę do kompilacji), oraz kilka makr związanych z biblioteką. To jest to, co trzeba dla mojego rozwoju makefile ma być dostrajalne bez najmniejszego zamieszania dla mojej platformy programistycznej, którą może być Linux, Solaris lub MacOS X. dla konsumentów programu istnieje skrypt configure wygenerowany przez autoconf, więc nie muszą się martwić o poprawne wykonanie tych bitów. Jednak, że ma silne podobieństwo genetyczne do tego kodu, w tym opcja UFLAGS.

Zauważ, że wiele systemów do budowania makefile ma mechanizm ustawiania cflags słabo podobny do tego - i po prostu przypisanie do CFLAGS anuluje dobra robota wykonana przez system. Ale musisz zrozumieć swój plik makefile, aby móc go modyfikować rozsądnie.

]

 14
Author: Jonathan Leffler,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-12-05 02:25:12

Przynajmniej dla GNU make, spróbuj zmiennej implicit CFLAGS, Jak w:

CFLAGS=-I/directory/to/add
 20
Author: unwind,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-12-04 17:18:54