2012-07-11 106 views
3

我有以下讓文件:理解的Makefile

CC = gcc 
CCDEPMODE = depmode=gcc3 
CFLAGS = -g -O2 -W -Wall -Wno-unused -Wno-multichar 
COMPONENTHEADER = Q_OBJECT 
CPP = gcc -E 
CPPFLAGS = -I/usr/include/Inventor/annex -D_REENTRANT -I/usr/share/qt3/include 
CXX = g++ 
CXXCPP = g++ -E 
CXXDEPMODE = depmode=gcc3 
CXXFLAGS = -g -O2 -fno-exceptions -W -Wall -Wno-unused -Wno-multichar -Woverloaded- virtual 
CYGPATH_W = echo 
GUI = QT 
Gui = Qt 
INCLUDES = 
LIBS = -lSoQt -lqt-mt -lXmu -lXi -lCoin -lGL -lXext -lSM -lICE -lX11 -ldl -lpthread -lm -lcxcore -lcv -lhighgui -lcvaux 
OBJS = MathTools.o PointCloud.o ExtractFeatures.o Tile.o Shape.o RoadDynamic.o 
SRCS = MathTools.cpp PointCloud.cpp ExtractFeatures.cpp Tile.cpp Shape.cpp RoadDynamic.cpp main.cpp 
HDRS = constants.h Shape.h MathTools.h PointCloud.h ExtractFeatures.h Tile.h RoadDynamic.h 
WIDGET = QWidget * 

all: main 


main: main.o ${OBJS} 
    ${CC} ${CFLAGS} ${INCLUDES} -o [email protected] main.o ${OBJS} ${LIBS} 

.c.o: 
    ${CC} ${CFLAGS} ${INCLUDES} -c $< 

depend: 
    makedepend ${SRCS} 

clean: 
    rm *.o core *~ 

tar: 
    tar cf code.tar Makefile *.c *.h testfile1 

print: 
    more Makefile $(HDRS) $(SRCS) | enscript -2r -p listing.ps 

我很奇怪,爲什麼當我運行使輸出爲

g++ -g -O2 -fno-exceptions -W -Wall -Wno-unused -Wno-multichar -Woverloaded-virtual -I/usr/include/Inventor/annex -D_REENTRANT -I/usr/share/qt4/include -c -o main.o main.cpp 

代替:

gcc -g -O2 -W -Wall -Wno-unused -Wno-multichar ... 

似乎cxx變量覆蓋了cc變量。這是爲什麼?

在這種情況下,「include =」是做什麼的?它似乎沒有設置任何東西。

謝謝

回答

2

因爲你的目標文件顯然是從.cpp文件建造。您沒有明確的規則來從.cpp文件構建.o文件,因此Make使用implicit rule$(CXX) $(CPPFLAGS) $(CXXFLAGS) -c

+0

謝謝奧利。 INCLUDES變量如何?這是什麼設置? – Mustafa 2012-07-11 00:55:40

+0

@ user1461142:它被設置爲空(即空字符串)。 – 2012-07-11 00:56:28