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ć.
]