2008-12-04 17 views
19

Witam Chciałbym Cię zapytać, Jeśli ktoś wie, jak mogę dodać katalog plików nagłówkowych w Makefile, aby uniknąć błędu * .h nie znaleziono, próbowałem tego opcja, ale nie działa:Dodawanie katalogu do nagłówków w Makefile

INC_PATH := -I /directory/to/add 

Odpowiedz

14

Chociaż celem jest ostatecznie wpłynąć na wartość flagami (jak sugeruje @unwind), często nie jest dobrym pomysłem, aby po prostu ustawić wartość CFLAGS, tak jak jest dziesięć zbudowany z wielu części. Musisz zrozumieć strukturę pliku Makefile i użyty zestaw makr.

[Dodany:

Eduardo pyta: Czy można pisać makra zrobić to samo?

Tak, ale to, czy są 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} 

ten makefile dla programu kopalni nazywa sqlcmd (nazwa wybrana dekadę i więcej, zanim Microsoft stworzył polecenia o tej samej nazwie). Zakładam, że program make ma reguły dla kompilacji kodu C do obiektu jak:

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

i że zasada łączenia programu z zestawu plików obiektów wymienionych w makro PRZEDMIOTÓW wygląda następująco:

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

Jak widać, istnieją osobno ustawiane makra dla ESQLC_VERSION (wersja Informix ESQL/C w użyciu, wyprowadzona domyślnie poprzez uruchomienie skryptu esqlcver), następnie katalogi zawierające INC1 na INC5 i INCFLAGS (można tam być całkiem sporo z nich, w zależności od platformy) i flag optymalizatora (OFLAGS), dodatkowych flag (CFLAGS), definiowanych przez użytkownika ed flags (UFLAGS - idiom, którego używam w większości moich plików Makefile; pozwala użytkownikowi ustawić UFLAGS na linii poleceń make i dodać dodatkową flagę do kompilacji) oraz kilka makr związanych z biblioteką. Oto, co trzeba zrobić, aby mój makefile do programowania był przestrajalny z minimalnym nakładem pracy na moją platformę programistyczną, którą może być Linux, Solaris lub MacOS X. Dla konsumentów programu istnieje skrypt configure wygenerowany przez autoconf, więc nie musicie się martwić, że uda się to naprawić. Ma to jednak silne podobieństwo genetyczne do tego kodu, w tym opcję UFLAGS.

Należy zauważyć, że wiele systemów dla budynku Makefile ma mechanizm do ustawiania CFLAGS w sposób podobny do tego - i po prostu przypisanie do CFLAGS cofa dobrą pracę wykonaną przez system. Ale musisz zrozumieć swój plik Makefile, aby móc go zmodyfikować.

]

18

przynajmniej dla GNU make, spróbuj ukrytą zmienną CFLAGS, jak w:

CFLAGS=-I/directory/to/add 
Powiązane problemy