我需要使用「nmake」構建我的Qt項目。
我正在使用Qt4.8,Windows 7 64Bit,VS2008 Command Prompt編譯器,帶有「nmake」。Qt nmake使用DEFINES變量構建
要求是,
我有多個預編譯的靜態庫,我想在我的Qt項目中使用。
所有靜態庫(名爲Type1,Type2,Type3和Type4)都是預編譯的,並生成相應的Type1.lib,Type2.lib,Type3.lib和Type4.lib庫文件。
我都用,說Type1.lib和Type3.lib在我的項目,
我知道常規方法,在這裏,裏面我的Qt生成.pro文件,我可以把
LIBS+=C:\Proj\PRO1\Type1.lib \
C:\Proj\PRO1\Type3.lib
和
HEADERS += C:\Proj\PRO1\Type1.h \
C:\Proj\PRO1\Type3.h
我在main.cpp中添加了相應的.h文件,以便從Type1和Type3庫中訪問apis。編譯和工作非常好。
但在我的情況下,有多個項目,我不想每次都這樣做。
我不想在我的項目中逐個包含頭文件;相反, 有一個全球性的頭文件GlobalHeader.h,具有限定它裏面的所有其他LIB頭文件的路徑信息,它看起來像這樣,
#ifndef GLOBALHEADER_H
#define GLOBALHEADER_H
#define TYPE1 "C:\Proj\PRO1\Type1.h"
#define TYPE2 "C:\Proj\PRO2\Type2.h"
#define TYPE3 "C:\Proj\PRO3\Type3.h"
#define TYPE4 "C:\Proj\PRO4\Type4.h"
#endif
我的main.cpp文件看起來有些這樣的事,
#include GLOBAL_HEAD //this is my requirement
#include TYPE1 //I should be able to use like this
#include TYPE3 //... " ...
#include <QtCore>
#include <QtGui>
#include <QApplication>
#include <QTextEdit>
int main(int argv, char **args)
{
QApplication app(argv, args);
QTextEdit textEdit;
textEdit.show();
//Lib functions called from TYPE1
//... some operations ...
//... some more operations ...
//Lib functions called from TYPE3
//... some operation ...
//... some more operations ...
return app.exec();
}
我給qmake的命令來編譯main.cpp中,
qmake -project DEFINES+=GLOBAL_HEAD=C:\Proj\GlobalHeader.h LIBS+=C:\Proj\PRO1\Type1.lib LIBS+=C:\Proj\PRO1\Type3.lib
,它生成的.pro文件,下面,
DEFINES += GLOBAL_HEAD=C:\Proj\GlobalHeader.h
LIBS += C:\Proj\PRO1\Type1.lib
LIBS += C:\Proj\PRO1\Type3.lib
TEMPLATE = app
TARGET =
DEPENDPATH += .
INCLUDEPATH += .
HEADERS +=
SOURCES += main.cpp
現在,我的步驟是用對應test.pro文件生成Makefile文件,
所以我給,
qmake test.pro
的Makefile,Makefile.Debug和Makefile.Release成功生成。
現在,我已經打開Visual Studio 2008的命令提示符,然後導航到我的項目目錄,並給編譯命令,
nmake all
它產生的錯誤...
.
.
main.cpp
C:\Proj\test\main.cpp(1) : error C2006: '#include' : expected a filename, found 'identifier'
C:\Proj\test\main.cpp(1) : fatal error C1083: Cannot open include file: '': No such file or directory
.
.
可有人請告訴我代碼有什麼問題?或者我錯過了qmake命令中的任何信息?我如何讓這個項目編譯?
對不起,如果我沒有寫得正確。如果您需要更多詳細信息,請告訴我。
在此先感謝您的幫助...
嗨羅馬,感謝您的回覆。我曾嘗試添加DEFINES + = GLOBAL_HEAD = \「C:\ Proj \ GlobalHeader.h \」。因此它將#include GLOBAL_HEAD反映爲#include「C:\ Proj \ GlobalHeader.h」。但是這並沒有幫助我。我忘了提及,TYPE1和TYPE3文件也在內部使用「#include GLOBAL_HEADER」。所以,qt試圖編譯它們並給出錯誤 - main.cpp C:\ Proj \ test \ main.cpp(2):error C2006:'#include':預期文件名,找到'identifier',即#包括TYPE1。 – kiranp 2012-08-03 10:21:20
看來,Qt在編譯時,並沒有將TYPE1和TYPE3作爲預編譯的庫。 – kiranp 2012-08-03 10:31:43
您可以在QtCreator的編譯輸出窗口中查看哪些參數被送入編譯器和鏈接器。 – 2012-08-03 14:44:55