沒注意看文字,其實 天嵌科技 已經標明瞭 “注意重複出現” 的問題,只是自己沒有注意。
今天按照 天嵌的 qtopia-2.2.0 製作 QT 應用程序,
按照手冊:
tmake -o Makefile second.pro
生成 Makefile 文件 . 如下:
#############################################################################
# Makefile for building second
# Generated by tmake at 17:08, 2013/04/19
# Project: second
# Template: app
#############################################################################
####### Compiler, tools and options
CC = gcc
CXX = g++
CFLAGS = -pipe -Wall -W -O2 -DNO_DEBUG
CXXFLAGS= -pipe -DQWS -fno-exceptions -fno-rtti -Wall -W -O2 -DNO_DEBUG
INCPATH = -I$(QTDIR)/include -I$(QPEDIR)/include
LINK = g++
LFLAGS =
LIBS = $(SUBLIBS) -L$(QPEDIR)/lib -L$(QTDIR)/lib -lqpe -lqtopia -lqte
MOC = $(QTDIR)/bin/moc
UIC = $(QTDIR)/bin/uic
TAR = tar -cf
GZIP = gzip -9f
####### Files
HEADERS = second.h
SOURCES = main.cpp \
second.cpp
OBJECTS = main.o \
second.o \
second.o
INTERFACES = second.ui
UICDECLS = second.h
UICIMPLS = second.cpp
SRCMOC = moc_second.cpp \
moc_second.cpp
OBJMOC = moc_second.o \
moc_second.o
DIST =
TARGET = $(QPEDIR)/image/opt/Qtopia/bin/second
DESKTOP = $(QPEDIR)/image/opt/Qtopia/apps/EmbedSky/second.desktop
ICON = $(QPEDIR)/image/opt/Qtopia/pics/second.png
INTERFACE_DECL_PATH = .
####### Implicit rules
.SUFFIXES: .cpp .cxx .cc .C .c
.cpp.o:
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
.cxx.o:
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
.cc.o:
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
.C.o:
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
.c.o:
$(CC) -c $(CFLAGS) $(INCPATH) -o $@ $<
####### Build rules
all: $(TARGET)
cp -f second.desktop $(DESKTOP)
cp -f second.png $(ICON)
$(TARGET): $(UICDECLS) $(OBJECTS) $(OBJMOC)
$(LINK) $(LFLAGS) -o $(TARGET) $(OBJECTS) $(OBJMOC) $(LIBS)
moc: $(SRCMOC)
tmake: Makefile
Makefile: second.pro
tmake second.pro -o Makefile
dist:
$(TAR) second.tar second.pro $(SOURCES) $(HEADERS) $(INTERFACES) $(DIST)
$(GZIP) second.tar
clean:
-rm -f $(OBJECTS) $(OBJMOC) $(DESKTOP) $(ICON) $(TARGET)
-rm -f *~ core
####### Sub-libraries
###### Combined headers
####### Compile
main.o: main.cpp \
second.h \
/opt/EmbedSky/Qte/x86-qtopia-2.2.0/qtopia/include/qtopia/qpeapplication.h
second.o: second.cpp \
second.h \
second.ui
second.h: second.ui
$(UIC) second.ui -o $(INTERFACE_DECL_PATH)/second.h
second.cpp: second.ui
$(UIC) second.ui -i second.h -o second.cpp
second.o: second.cpp \
second.h \
second.ui
moc_second.o: moc_second.cpp \
second.h
moc_second.o: moc_second.cpp \
second.h
moc_second.cpp: second.h
$(MOC) second.h -o moc_second.cpp
moc_second.cpp: second.h
$(MOC) second.h -o moc_second.cpp
接着 make :
[root@localhost second]# make
Makefile:121: warning: overriding commands for target `moc_second.cpp'
Makefile:118: warning: ignoring old commands for target `moc_second.cpp'
/opt/EmbedSky/Qte/x86-qtopia-2.2.0/qt2/bin/uic second.ui -o ./second.h
g++ -c -pipe -DQWS -fno-exceptions -fno-rtti -Wall -W -O2 -DNO_DEBUG -I/opt/EmbedSky/Qte/x86-qtopia-2.2.0/qt2/include -I/opt/EmbedSky/Qte/x86-qtopia-2.2.0/qtopia/include -o main.o main.cpp
/opt/EmbedSky/Qte/x86-qtopia-2.2.0/qt2/include/qdatetime.h:51: warning: 'class QDate' has virtual functions but non-virtual destructor
/opt/EmbedSky/Qte/x86-qtopia-2.2.0/qtopia/include/qtopia/../../src/libraries/qtopia/qcom.h:88: warning: 'struct QUnknownInterface' has virtual functions but non-virtual destructor
/opt/EmbedSky/Qte/x86-qtopia-2.2.0/qtopia/include/qtopia/../../src/libraries/qtopia/qcom.h:100: warning: 'struct QLibraryInterface' has virtual functions but non-virtual destructor
/opt/EmbedSky/Qte/x86-qtopia-2.2.0/qtopia/include/qtopia/../../src/libraries/qtopia/applicationinterface.h:49: warning: 'struct ApplicationInterface' has virtual functions but non-virtual destructor
/opt/EmbedSky/Qte/x86-qtopia-2.2.0/qt2/bin/uic second.ui -i second.h -o second.cpp
g++ -c -pipe -DQWS -fno-exceptions -fno-rtti -Wall -W -O2 -DNO_DEBUG -I/opt/EmbedSky/Qte/x86-qtopia-2.2.0/qt2/include -I/opt/EmbedSky/Qte/x86-qtopia-2.2.0/qtopia/include -o second.o second.cpp
/opt/EmbedSky/Qte/x86-qtopia-2.2.0/qt2/include/qtooltip.h:87: warning: 'class QToolTip' has virtual functions but non-virtual destructor
/opt/EmbedSky/Qte/x86-qtopia-2.2.0/qt2/bin/moc second.h -o moc_second.cpp
g++ -c -pipe -DQWS -fno-exceptions -fno-rtti -Wall -W -O2 -DNO_DEBUG -I/opt/EmbedSky/Qte/x86-qtopia-2.2.0/qt2/include -I/opt/EmbedSky/Qte/x86-qtopia-2.2.0/qtopia/include -o moc_second.o moc_second.cpp
g++ -o second main.o second.o second.o moc_second.o moc_second.o -L/opt/EmbedSky/Qte/x86-qtopia-2.2.0/qtopia/lib -L/opt/EmbedSky/Qte/x86-qtopia-2.2.0/qt2/lib -lqpe -lqtopia -lqte
second.o: In function `second::user_button()':
second.cpp:(.text+0x0): multiple definition of `second::user_button()'
second.o:second.cpp:(.text+0x0): first defined here
second.o: In function `second::~second()':
second.cpp:(.text+0x10): multiple definition of `second::~second()'
second.o:second.cpp:(.text+0x10): first defined here
second.o: In function `second::~second()':
second.cpp:(.text+0x40): multiple definition of `second::~second()'
second.o:second.cpp:(.text+0x40): first defined here
second.o: In function `second::~second()':
second.cpp:(.text+0x60): multiple definition of `second::~second()'
second.o:second.cpp:(.text+0x60): first defined here
second.o: In function `second::event(QEvent*)':
second.cpp:(.text+0x80): multiple definition of `second::event(QEvent*)'
second.o:second.cpp:(.text+0x80): first defined here
second.o: In function `second::second(QWidget*, char const*, unsigned int)':
second.cpp:(.text+0x170): multiple definition of `second::second(QWidget*, char const*, unsigned int)'
second.o:second.cpp:(.text+0x170): first defined here
second.o: In function `second::second(QWidget*, char const*, unsigned int)':
second.cpp:(.text+0x580): multiple definition of `second::second(QWidget*, char const*, unsigned int)'
second.o:second.cpp:(.text+0x580): first defined here
moc_second.o: In function `second::className() const':
moc_second.cpp:(.text+0x0): multiple definition of `second::className() const'
moc_second.o:moc_second.cpp:(.text+0x0): first defined here
moc_second.o: In function `second::staticMetaObject()':
moc_second.cpp:(.text+0x90): multiple definition of `second::staticMetaObject()'
moc_second.o:moc_second.cpp:(.text+0x90): first defined here
moc_second.o:(.bss+0x0): multiple definition of `second::metaObj'
moc_second.o:(.bss+0x0): first defined here
moc_second.o: In function `second::tr(char const*, char const*)':
moc_second.cpp:(.text+0x170): multiple definition of `second::tr(char const*, char const*)'
moc_second.o:moc_second.cpp:(.text+0x170): first defined here
moc_second.o: In function `second::tr(char const*)':
moc_second.cpp:(.text+0x1b0): multiple definition of `second::tr(char const*)'
moc_second.o:moc_second.cpp:(.text+0x1b0): first defined here
moc_second.o: In function `second::initMetaObject()':
moc_second.cpp:(.text+0x1f0): multiple definition of `second::initMetaObject()'
moc_second.o:moc_second.cpp:(.text+0x1f0): first defined here
collect2: ld returned 1 exit status
make: *** [second] Error 1
出現了:overriding commands for target `moc_second.cpp' 的警告 ,即是 重複出現.
second.o:second.cpp:(.text+0x60): first defined here 說明被重複定義了.
查看 Makefile 文件:
OBJECTS = main.o \
second.o \
second.o
SRCMOC = moc_second.cpp \
moc_second.cpp
OBJMOC = moc_second.o \
moc_second.o
moc_second.o: moc_second.cpp \
second.h
moc_second.o: moc_second.cpp \
second.h
moc_second.o: moc_second.cpp \
second.h
moc_second.cpp: second.h
$(MOC) second.h -o moc_second.cpp
moc_second.cpp: second.h
$(MOC) second.h -o moc_second.cpp
發現很多的重複在裏面.
後來去掉了這些重複的代碼.
再 make .
出現:make: *** No rule to make target`INTERFACES',
[root@localhost second]# make
make: *** No rule to make target `INTERFACES', needed by `/opt/EmbedSky/Qte/x86-qtopia-2.2.0/qtopia/image/opt/Qtopia/bin/second'. Stop.
看提示信息是 Makefile 有錯誤.
查找到:INTERFACES:
OBJECTS = main.o \
second.o \
INTERFACES = second.ui
可以看到 second.o \ 多了一個 \ .
將其刪除,再 make.
[root@localhost second]# make
g++ -c -pipe -DQWS -fno-exceptions -fno-rtti -Wall -W -O2 -DNO_DEBUG -I/opt/EmbedSky/Qte/x86-qtopia-2.2.0/qt2/include -I/opt/EmbedSky/Qte/x86-qtopia-2.2.0/qtopia/include -o moc_second.o moc_second.cpp
g++ -o /opt/EmbedSky/Qte/x86-qtopia-2.2.0/qtopia/image/opt/Qtopia/bin/second main.o second.o moc_second.o -L/opt/EmbedSky/Qte/x86-qtopia-2.2.0/qtopia/lib -L/opt/EmbedSky/Qte/x86-qtopia-2.2.0/qt2/lib -lqpe -lqtopia -lqte
cp -f second.desktop /opt/EmbedSky/Qte/x86-qtopia-2.2.0/qtopia/image/opt/Qtopia/apps/EmbedSky/second.desktop
cp -f second.png /opt/EmbedSky/Qte/x86-qtopia-2.2.0/qtopia/image/opt/Qtopia/pics/second.png
成功了,生成了所需的文件.