Qt工程nmake makefile问题

及旗下全部分类
打开微信扫一扫,关注圣才:
sc100xuexi
认证官方微博
认证官方微博
讲解Windows平台下 Qt Creator编译方法
发布人:&&发布日期: 15:54&&共3849人浏览
  本文介绍的是Windows平台下 Qt Creator编译方法讲解, Qt Creator 主要是为了帮助新 Qt 用户更快速入门并运行项目,还可提高有经验的 Qt 开发人员的工作效率。
  Qt Creator是一个轻量级的开源跨平台IDE,为Qt开发量身定做。对于学习Qt开发来说,在我看来最快捷的方法,就是参与一个开源跨平台项目的开发,体会其对库的使用。而Qt Creator源码的阅读的基础,就是要编译/调试它。
  一、编译准备
  编译QtCreator(简称QTC)自身,会发现缺少一些头文件,拷贝他们到对应的qt目录中,他们是:
  拷贝src\corelib\kernel\qwineventnotifier_p.h至include\QtCore\private\qwineventnotifier_p.h
  注:在未指定QT_PRIVATE_HEADERS的情况下。
  二、命令行方式编译QTC(QtCreator简称)
  设QTC源码路径:D:\DengYC\QtCreator,编译目录在:D:\DengYC\BuildQTC,设置好Qt环境变量后,控制台进入编译目录。
  1. 生成Makefile:qmake &CONFIG+=release& &QT_PRIVATE_HEADERS=&E:/qt-everywhere-opensource-src-4.7.1/include& ..\QtCreator\qtcreator.pro
  2. 编译:nmake
  3. 安装:nmake INSTALL_ROOT=&D:\MyQTC& install
  安装后,将在D:\MyQTC目录下找到编译完成的QTC,但会发现有些bin目录下有些DLL文件拷贝不全,需要手动拷贝。
  其中QT_PRIVATE_HEADERS宏指定Qt源码路径,用于编译QmlDesigner插件!
  三、用QTC来编译QTC
  配置好QTC后,用QTC打开qtcreator.pro,设置target为release编译,之后进入编译目录执行命令行步骤中的第三步,即可得到相同的结果。
  个人建议在命令行下编译release版本,用于使用QTC,而在QTC下编译debug版本,用于开发QTC。
  四、编译Jom
  如果你在使用QTC编译工程时遇到如下错误,则说明你缺少Jom工具:
  Could not start process &jom.exe&
  Jom是一个可以充分利用多核的优势,将nmake变成类似
  的工具。
  下载:git clone git://gitorious.org/qt-labs/jom.git Jom
  配置:qmake CONFIG+=release jom.pro
  编译:nmake release
  拷贝bin目录至qt所在目录即可!
  五、加速命令行编译
  如果你想加速你的命令行编译,则你需要利用第四步得到的jom.exe,将第二步中的nmake改成jom即可
  小结:Windows平台下 Qt Creator编译方法讲解的内容介绍完了,希望本文能够帮助你学习。
  来源:网络
e书题库免费下载
网授课程免费试听配置qt + wince + vs2005环境 - hulunberbus - ITeye技术网站
本文博客链接:,作者:jdh,转载请注明.
极其复杂!这是我配置过的最复杂的环境了,辗转中外论坛,通宵编译,国庆7天就花在这上面了,古龙说过,人在公司,身不由己啊.如果看这篇文章的你严格按我写的一步步做的话,大概20个小时后就完成配置了:)
言归正传,下面开始配置环境.
1.操作系统:win7
2.wince上的Qt库版本:qt-everywhere-opensource-src-4.7.3.zip
3.Wince6.0
5.qt在windows下面的sdk:qt-sdk-win-opensource-2010.05.exe或者qt-win-opensource-4.7.3-vs2008.exe
6.Qt在vs上的插件:qt-vs-addin-1.1.9
首先安装vs2005及各个补丁:
2.Visual Studio 2005 Service Pack1
3.Visual Studio 2005 Service Pack1 Update for Windows Vista
4.Visual Studio 2005 Service Pack1 ATL Security Update
这一步安装遇到的问题:
Vs2005我第一次下载的是英文试用版,安装的时候显示内存不足的错误(明明还有2G空间),于是重新下了个中文版vs2005,安装成功.相应的补丁也要下中文版的
安装wince6.0及补丁:
1.wince6.0
2.Windows Embedded CE 6.0Platform Builder Service Pack 1
3.Windows Embedded CE 6.0 R2
4.Windows Embedded CE 6.0 R3
5.安装sdk,我用的是友善之臂公司提供的Mini6410-CE6-SDK
安装qt for wince库:qt-everywhere-opensource-src-4.7.3.zip
我第一次下载的是最新版的qt库: qt-everywhere-opensource-src-4.7.4.zip,然后再nmake的阶段总是出现问题:
Creatinglibrary ..\..\lib\QtGuid4.lib and object ..\..\lib\QtGuid4.exp
pngwrite.obj : error LNK2019: unresolved externalsymbol gmtime referenced in function png_convert_from_time_t
..\..\lib\QtGuid4.dll : fatal error LNK1120: 1unresolved externals
在国外论坛上发现一个解决方法:
注释掉qt源代码:/src/3rdparty/libpng/pnglibconf.h中的一句话:
#definePNG_CONVERT_tIME_SUPPORTED
然后重新配置configure即可.
因为据说4.7.4还有其他一些问题,所以我干脆下载了4.7.3来使用.
1.解压qt-everywhere-opensource-src-4.7.4.zip到e:盘下qt_wince文件夹
2.增加环境变量e:\qt_wince\bin
3.修改E:\qt_wince\mkspecs\wince60standard-armv4i-msvc2005中的qmake.conf文件中的CE_SDK = Mini6410-CE6-SDK # replace with actual SDK name
4.打开vs2005,打开工具-&visual studio 2005 command prompt
5.输入命令:configure -platform win32-msvc2005 -xplatformwince60standard-armv4i-msvc2005.这一步是配置qt库,配置需要几分钟,配置成功会在qt_wince/bin下面生成一些列工具.可以用checksdk.exe –list查看当前装的sdk版本.
6.输入命令: set INCLUDE=E:\Microsoft Visual Studio 8\VC\ce\E:\WindowsCE Tools\wce600\Mini6410-CE6-SDK\Include\Armv4i
7.输入命令: set LIB=E:\Microsoft Visual Studio 8\VC\ce\lib\armv4i;E:\WindowsCE Tools\wce600\Mini6410-CE6-SDK\Lib\ARMV4I
8.输入命令: set PATH=E:\Microsoft Visual Studio 8\VC\ce\bin\x86_%PATH%
9.输入命令nmake,这一步需要几个小时(跑了一夜,早上起床编译成功)
到这一步qt库以及编译完毕.
安装qt在windows下面的sdk:qt-sdk-win-opensource-2010.05.exe
安装好后,qt默认是mingw编译的,所以需要用nmake重编译
1.打开vs2005,打开工具-&visual studio 2005 command prompt
2.进入指定目录下:cd E:\Qt\2010.05\qt
3.编译:configure -debug-and-release -platform win32-msvc2005
4.编译完成后nmake,大概8个小时后就好了吧(我的笔记本时间)
nmake前注意:
以下是一个网友遇到的,我不幸也遇到了- -!,所以先删除那4个文件先
在编译QT代码时,会遇到一些问题,我遇到了两个问题。
然后继续编译N久之后,又出现了问题。。。编译大概1个小时之后,出现:
01.api\qscriptextensionplugin.h(43): Error: Undefined interface
02.NMAKE : fatal error U1077: 'C:\Qt\2009.05\qt\bin\moc.exe' : return code '0x1'
04.NMAKE : fatal error U1077: '"d:\Program Files\Microsoft Visual Studio 9.0\VC\BIN
05.\nmake.exe"' : return code '0x2'
07.NMAKE : fatal error U1077: 'cd' : return code '0x2'
api\qscriptextensionplugin.h(43): Error: Undefined interface
NMAKE : fatal error U1077: 'C:\Qt\2009.05\qt\bin\moc.exe' : return code '0x1'
NMAKE : fatal error U1077: '"d:\Program Files\Microsoft Visual Studio 9.0\VC\BIN
\nmake.exe"' : return code '0x2'
NMAKE : fatal error U1077: 'cd' : return code '0x2'
以上是出错代码,解决方法是将
qt/src/script/tmp/moc/debug_shared/mocinclude.tmp
qt/src/script/tmp/moc/release_shared/mocinclude.tmp
删除,然后继续编译。
过了很长时间之后,在编译webkit部分的代码时,会发生错误,系统会停止编译
D:\tools\Qt\2010.05\qt\src\3rdparty\webkit\WebCore\tmp\moc\debug_shared\moc_Sock
etStreamHandlePrivate.cpp(97) : error C2065: “QSslError”: 未声明的标识符
D:\tools\Qt\2010.05\qt\src\3rdparty\webkit\WebCore\tmp\moc\debug_shared\moc_Sock
etStreamHandlePrivate.cpp(97) : error C3861: “socketSslErrors”: 找不到标识符
正在生成代码...
NMAKE : fatal error U1077: “"D:\tools\Microsoft Visual Studio 10.0\VC\BIN\cl.EX
E"”: 返回代码“0x2”
NMAKE : fatal error U1077: “"D:\tools\Microsoft Visual Studio 10.0\VC\BIN\nmake
.exe"”: 返回代码“0x2”
NMAKE : fatal error U1077: “cd”: 返回代码“0x2”
解决方法是将
qt\src\3rdparty\webkit\WebCore\tmp\moc\debug_shared\mocinclude.tmp
qt\src\3rdparty\webkit\WebCore\tmp\moc\release_shared\mocinclude.tmp
删除之后可以继续编译(重新执行nmake命令)
编译好后,wince上的qt库就编译成功了,可以打开qt下demo工程编译测试.
QT已经有编译好的VS库,可以直接安装qt-win-opensource-4.7.3-vs2008.exe而不必经历上面这步的过程!!!
安装Qt在vs上的插件:qt-vs-addin-1.1.9
没什么好说的,安装好后在vs上出现qt的插件图标
这个时候启动Qt-&Launch Designer失败,显示错误:QT in the
given path was built using minGW
恩,这个已经是最后一个问题了,解决方法:
1.修改注册表:
HKEY_CURRENT_USER\Software\Trolltech\Versions\
下增加一个子项
qt201005(需要的名称)
子项下面增加一个数值 InstallDir,值就是你要配置的Qt路径
2.删除文件
删除qi的lib目录下的
libqtmain.a and libqtmaind.a 两个文件。
好了,大功告成,环境配置成功!
接下来可以把qt编译的程序部署到wince板子上进行测试,
将exe文件拷入想要的目录,然后拷贝几个库文件进去:
QtCore4.dll,QtGui4.dll,QtCored4.dll,QtGuid4.dllmsvcr90d.dll
前两个release版本,后两个是debug版本文件.
hulunberbus
浏览: 200683 次
我没有找到相关的jar包。。。能否提供啊?windows下安装qt4.7,编译hello QT 成功。 - 柳北风儿~~~~~~~欲宇仙炅 - ITeye技术网站
博客分类:
win7环境下安装VS2008,QT4.7
1,安装VS2008(Visual.Studio.Team.System.2008.Team.Suite-ZWTiSO)2,下载安装VS2008编译过的QT库4.7: 3,下载安装VS2008的QT集成插件:
一切默认安装!无需配置环境变量。
不过如果在VS2008里面自行编写QT代码。需要VS设置引用文件库,才能编译通过。
QT下载网站
===========================================================
下面展示一下安装后,在QT自带的命令窗口上运行“hello QT!”例子
打开Qt by Nokia v4.7.4 (VS2008 OpenSource)&QT Command Prompt”输入如下命令:
QT命令窗口运行hello QT例子
1,输入:cd D:\VSWorkSpace\qt-book\chap01\hello\
进入hello.cpp存在的目录 2,输入:qmake -project
生成一个hello.pro文件。3,输入:qmake hello.pro
生成makefile文件(也可以执行 qmake -tp vc hello.pro,就可以生成Visual Stuio工程文件。就不用下面几步了)4,输入:nmake
构建该程序(VC的命令)5,输入:cd debug 进入debug目录,6,输入:hello
运行程序。
===========================================================
成功运行文件的过程展示如下:
1:cd D:\VSWorkSpace\qt-book\chap01\hello\ 进入hello.cpp文件目录
2:qmake -project
生成一个hello.pro文件。
3:qmake hello.pro 生成makefile文件
构建该程序(VC的命令)
5:输入:cd debug 进入debug目录,
输入:hello
运行程序。
浏览: 1233864 次
来自: 苏州
自动连接可查看setupUi函数里的最后一句调用,作用是注册o ...
你好,我想请问一个问题,我照你说的做了第6步1),把exe拷贝 ...
看帖不回不好,5169人阅读
我的电脑:win 7 64位
下载qt 4.8.4的源代码qt-everywhere-opensource-src-4.8.4.zip,解压到路径:
E:\Qt_compl\qt-src-4.8.4
具体下载路径:
由于Qt4.8在VS环境下的一些问题,为了避免编译中途出现,需要修改有:
1、(其实这步我没有做,貌似不需要)删除源码包中bin目录下的syncqt和syncqt.dat文件,如你不放心可将其改名或剪切到别的位置。如不修改将发生 Perl not found in environment - cannot run syncqt 错误。
2、修改\mkspecs\win32-msvc2010下的qmake.conf文件,将其中的
QMAKE_CFLAGS=-nologo -Zm200 -Zc:wchar_t-
QMAKE_CFLAGS=-nologo -Zm200 -Zc:wchar_t
(注意末尾的”-“号区别)
如不修改将来如有项目使用wchar_t,qt却编译成wchar_t-,编译会导致连接错误,提示找不到Qwstring
搜索整个文件,将MD,MDd对应改成MT,MTd,以实现在没有VC库的电脑也能运行Qt程序(反正这个我不修改....)。
3. 修改E:\Qt_compl\qt-src-4.8.4\src\3rdparty\webkit\Source\WebCore\platform\DefaultLocalizationStrategy.cpp& 327行:
“&selection&”
\&&selection&\&
然后生成makefile文件:
E:\Qt_compl\qt-src-4.8.4&configure -debug-and-release -fast -static& -qt-sql-sqlite -qt-zlib -declarative -qt-style-windowsvista -qt-libpng -qt-libmng -qt-libtiff -qt-libjpeg& -nomake demos -nomake examples -nomake docs -mp
-debug-and-release -static一定要有,这个是我们编译的目的.-mp表示多核同时编译。
注意-qt-sql-sqlite实际上是对sqlite3的支持,所以不要再徒劳的想要支持sqlite3,没有这个-qt-sql-sqlite3这个编译选项的,-qt-sql-sqlite2实际上就是sqlite3之前的一个版本,其实也是不用考虑去支持的。一旦,开启了-qt-sql-sqlite,在E:\Qt_compl\qt-4.8.4\src\sql编译的中间文件里面就可以看到sqlite3.obj这个中间文件的存在了:
实际上看E:\Qt_compl\qt-src-4.8.4\src\sql,就可以发现Makefile里面就指定了3rdparty里面的sqlite,也作为编译范围(只看和sqlite3.xxx相关的):
= kernel\qsqlquery.cpp \
kernel\qsqldatabase.cpp \
kernel\qsqlfield.cpp \
kernel\qsqlrecord.cpp \
kernel\qsqldriver.cpp \
kernel\qsqldriverplugin.cpp \
kernel\qsqlerror.cpp \
kernel\qsqlresult.cpp \
kernel\qsqlindex.cpp \
kernel\qsqlcachedresult.cpp \
drivers\sqlite\qsql_sqlite.cpp \
..\3rdparty\sqlite\sqlite3.c \
= -I&..\..\include\QtCore& -I&..\..\include& -I&..\..\include\QtSql& -I&tmp\rcc\debug_static& -I&tmp& -I&..\3rdparty\sqlite& -I&..\..\include\ActiveQt& -I&tmp\moc\debug_static& -I&..\..\mkspecs\win32-msvc2010&
tmp\obj\debug_static\sqlite3.obj: ..\3rdparty\sqlite\sqlite3.c ..\..\include\QtCore\qconfig.h \
..\corelib\global\qconfig.h
输入nmake, start compiling....
开启&-webkit&功能之后,编译的时候非常久,而且,中途出现报错,问题很多,建议不要开启了(现在可以肯定的是,webkit根本不支持static编译,也就是configure指定了static的时候,这个就一定编译失败)::
&&&&&&& cd qwebframe\ && &D:\Program Files\Microsoft Visual Studio 9.0\VC\BIN\nmake.exe& -f Makefile.WebKit
Microsoft (R) Program Maintenance Utility Version 9.00.30729.01
Copyright (C) Microsoft Corporation.& All rights reserved.
&&&&&&& &D:\Program Files\Microsoft Visual Studio 9.0\VC\BIN\nmake.exe& -f Makefile.WebKit.Debug all
Microsoft (R) Program Maintenance Utility Version 9.00.30729.01
Copyright (C) Microsoft Corporation.& All rights reserved.
&&&&&&& link /LIBPATH:&e:\Qt_compl\qt-src-4.8.4\lib& /LIBPATH:&e:\Qt_compl\qt-src-4.8.4\lib& /NOLOGO /DYNAMICBASE /NXCOMPAT /
DEBUG /SUBSYSTEM:CONSOLE &/MANIFESTDEPENDENCY:type='win32' name='mon-Controls' version='6.0.0.0' publicK
eyToken='ccf1df' language='*' processorArchitecture='*'& /MANIFEST /MANIFESTFILE:&tmp\obj\debug_static\tst_qwebfram
e.intermediate.manifest& /OUT:debug\tst_qwebframe.exe @C:\Users\ADMINI~1\AppData\Local\Temp\nm2432.tmp
LINK : fatal error LNK1104: cannot open file '../../WebCore/debug\webcore.lib'
NMAKE : fatal error U1077: '&D:\Program Files\Microsoft Visual Studio 9.0\VC\BIN\link.EXE&' : return code '0x450'
这个错是在编译路径:E:\Qt_compl\qt-src-4.8.4\src\3rdparty\webkit\Source\WebKit\qt\tests\qwebframe的时候出现的,E:\Qt_compl\qt-src-4.8.4\src\3rdparty\webkit\Source\WebKit\qt\tests下面的都是测试的实例,其实可以不编译的。
解决这个问题,我先是尝试修改&qwebframe的makefile,因为他的makefile确实不对,lib链接指向不对,倒退2级目录,应该是4级,也即是:'../../../../WebCore/debug\webcore.lib',但是我修改了之后,又出现链接解析错误。
所以,我只能把这个tests文件夹或者qwebframe文件夹不编译了。
解决方案1:
把文件E:\Qt_compl\qt-src-4.8.4\src\3rdparty\webkit\Source\WebKit\qt\tests\Makefile.WebKit里面的下面这段规则里面的“sub-qwebframe-make_default”删除:
make_default: sub-qwebframe-make_default sub-qwebpage-make_default sub-qwebelement-make_default sub-qgraphicswebview-make_default sub-qwebhistoryinterface-make_default sub-qwebview-make_default sub-qwebhistory-make_default
sub-qwebinspector-make_default sub-hybridPixmap-make_default sub-qdeclarativewebview-make_default sub-benchmarks-painting-make_default sub-benchmarks-loading-make_default FORCE
解决方案2:
把文件E:\Qt_compl\qt-src-4.8.4\src\3rdparty\webkit\Source\Makefile.WebKit里面的下面这段规则里面的&sub-WebKit-qt-tests-make_default-ordered&删除:
make_default: sub-JavaScriptCore-JavaScriptCore-pro-make_default-ordered sub-WebCore-make_default-ordered sub-WebKit-qt-QtWebKit-pro-make_default-ordered sub-WebKit-qt-declarative-make_default-ordered
sub-WebKit-qt-tests-make_default-ordered FORCE
有必要解释一下,makefile如果没有指定为目标,比如直接输入nmake(Unix输入make),那么就会编译第一个伪目标,上面tests文件夹里面的工程编译都是在E:\Qt_compl\qt-src-4.8.4\src\3rdparty\webkit\Source\Makefile.WebKit里面指定的,而qwebframe的最直接上层的makefile对应的就是E:\Qt_compl\qt-src-4.8.4\src\3rdparty\webkit\Source\WebKit\qt\tests\Makefile.WebKit,我上面的两个解决方案都是逃避方案,就是让有问题的这个东西不编译了。那么说道了第一个伪目标,可以打开这两个makefile看看,第一个伪目标都是:
first: make_default
实际上,整个Qt的下属子makefile都是这么个第一个伪目标。所以直接nmake编译的时候就是相当于nmake first,而first依赖于make_default,make_default依赖于后面的一些东西,就是上面的了。对应的,以E:\Qt_compl\qt-src-4.8.4\src\3rdparty\webkit\Source\WebKit\qt\tests\Makefile.WebKit为例子,如果输入nmake
all,那么对应的编译规则就是:
all: sub-qwebframe-all sub-qwebpage-all sub-qwebelement-all sub-qgraphicswebview-all sub-qwebhistoryinterface-all sub-qwebview-all sub-qwebhistory-all sub-qwebinspector-all sub-hybridPixmap-all sub-qdeclarativewebview-all
sub-benchmarks-painting-all sub-benchmarks-loading-all FORCE
后面还是有地方会失败,实际上是因为链接错误,有很多cpp文件不会编译,倒是对应的lib文件是空的:
JSDeviceOrientationEvent.obj : warning LNK4221: no
archive member will be inaccessible
JSDeviceMotionEvent.obj : warning LNK4221: no
archive member will be inaccessible
JSDataTransferItems.obj : warning LNK4221: no
archive member will be inaccessible
JSDataTransferItem.obj : warning LNK4221: no
archive member will be inaccessible
MathMLElementFactory.obj : warning LNK4221: no
archive member will be inaccessible
对应的cpp文件里面会有这种#if :
#if ENABLE(NETSCAPE_PLUGIN_API)
ENABLE宏的实际定义:
#define ENABLE(WTF_FEATURE) (defined ENABLE_##WTF_FEATURE
&& ENABLE_##WTF_FEATURE)
对应的宏定义是在Makefile里面指定的,以E:\Qt_compl\qt-src-4.8.4_test\src\3rdparty\webkit\Source\WebCore下面的Makefile为例子:
= -DUNICODE -DWIN32 -DQT_LARGEFILE_SUPPORT -DNDEBUG -DBUILDING_QT__=1 -DNDEBUG -DQT_ASCII_CAST_WARNINGS -DENABLE_XSLT=0 -DENABLE_WEB_TIMING=0 -DENABLE_JAVASCRIPT_DEBUGGER=1 -DENABLE_DATABASE=1 -DENABLE_EVENTSOURCE=1 -DENABLE_OFFLINE_WEB_APPLICATIONS=1 -DENABLE_DOM_STORAGE=1 -DENABLE_ICONDATABASE=1 -DENABLE_CHANNEL_MESSAGING=1 -DENABLE_DIRECTORY_UPLOAD=0 -DENABLE_FILE_SYSTEM=0 -DENABLE_QUOTA=0 -DENABLE_SQLITE=1 -DENABLE_DASHBOARD_SUPPORT=0 -DENABLE_FILTERS=1 -DENABLE_XPATH=1 -DENABLE_WCSS=0 -DENABLE_SHARED_WORKERS=1 -DENABLE_WORKERS=1 -DENABLE_XHTMLMP=0 -DENABLE_DETAILS=1 -DENABLE_METER_TAG=1 -DENABLE_PROGRESS_TAG=1 -DENABLE_BLOB=1 -DENABLE_NOTIFICATIONS=1 -DENABLE_INPUT_SPEECH=0 -DENABLE_INSPECTOR=1 -DENABLE_3D_RENDERING=1 -DENABLE_WEB_AUDIO=0 -DENABLE_WEBGL=0 -DENABLE_MEDIA_STATISTICS=0 -DENABLE_VIDEO_TRACK=0 -DENABLE_TOUCH_ICON_LOADING=0 -DENABLE_ANIMATION_API=0 -DENABLE_SVG=1 -DENABLE_SVG_FONTS=1 -DENABLE_SVG_FOREIGN_OBJECT=1 -DENABLE_SVG_ANIMATION=1 -DENABLE_SVG_AS_IMAGE=1 -DENABLE_SVG_USE=1 -DENABLE_DATALIST=1 -DENABLE_TILED_BACKING_STORE=1 -DENABLE_NETSCAPE_PLUGIN_API=1 -DENABLE_WEB_SOCKETS=1 -DWTF_USE_QT_BEARER=1 -DENABLE_TOUCH_EVENTS=1 -DENABLE_VIDEO=0 -DSQLITE_CORE -DSQLITE_OMIT_LOAD_EXTENSION -DSQLITE_OMIT_COMPLETE -D_HAS_TR1=0 -DBUILDING_JavaScriptCore -DBUILDING_WTF -DBUILDING_WEBKIT -DQT_MAKEDLL -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_NETWORK_LIB -DQT_CORE_LIB -DQT_HAVE_MMX -DQT_HAVE_3DNOW -DQT_HAVE_SSE -DQT_HAVE_MMXEXT -DQT_HAVE_SSE2 -DQT_THREAD_SUPPORT
里面-DENABLE_NETSCAPE_PLUGIN_API=1,不能编译的cpp文件,其对应的if预编译都是false的。这些东西太多了,我也不知道在哪里一次性搞定,受不了,不想研究了,如果谁牛逼点,搞定了,烦请知会一下我哈,谢谢。
结束了么?没有...
我需要使用vs 2010做qt的开发,所以需要从官网下载一个
下载路径:http://qt-project.org/downloads,安装就是了,接下来的就是使用vs10 开发之旅了.&
注,Qt的VS插件配置:
但是如果之前安装过这个插件,配合过之前的安装版使用过的话,需要做一些修改,打开vs2010,打开---&菜单栏&--&Qt&---&Qt Options&
把里面的条目删除,再添加静态编译的根目录:
点击ok,但是配置还没有结束:
再新建一个qt工程:
如图,我这里叫做qt3,找到属性管理器:
双击debug和relase里面的Microsoft.Cpp.Win32.user
修改里面的路径为E:\Qt_compl\qt-src-4.8.4.
至此,一切才算完成了.
---------------------------------------------------------------------------------------------------------------------------------------------------------
说一下qt 源代码工程的make及其submak规则:
注:下面说的根目录就是qt代码解压后的最上层直接含有代码的目录。
1、在configure的时候,不要指定那些模块nomake即可:
E:\Qt_compl\qt-src-4.8.4&configure -debug-and-release -fast -static
上面的configure配置就会使得所有的模块都可以被编译进来,也就是会给所有模块生成相应的makefile更新文件(因为每个子目录都存在一个原始的Makefile文件,他不是直接用于编译的,而是用于生成一个新的Makefile的)。而且一旦指定了大的模块no make,则该文件夹下面的模块是不会生成在根目录下面的makefile的相应的编译规则和submak规则了,比如:
-nomake demos -nomake examples -nomake docs
就不会给demos examples 以及docs文件夹下面的工程生成直接编译的makefile的规则了,也就是无法用于下面第三步直接用于根目录下面的make规则和submake规则,但是不是说这个子文件就不能make了,依旧可以的,原始的Makefile还是存在的,可以在sub dir下面做nmake,来生成新的Makefile,以E:\Qt_compl\qt-4.8.4\examples\network\http文件夹为例子:
E:\Qt_compl\qt-4.8.4\bin\qmake E:/Qt_compl/qt-4.8.4/examples\network\http\http.pro
-o Makefile -spec win32-msvc2008
&$(MAKE)& -$(MAKEFLAGS) -f Makefile
first: all
E:\Qt_compl\qt-4.8.4\bin\qmake E:/Qt_compl/qt-4.8.4/examples\network\http\http.pro
-o Makefile -spec win32-msvc2008
在E:\Qt_compl\qt-4.8.4\examples\network\http下面输入nmake就会生成新的Makefile,然后编译工程的。
2、如果configure之后,直接nmake会让所有的默认的开启的模块都编译
3、可以做submake的,也就是只编译指定的文件夹下面的东西,比如examples文件夹的实例程序,在configure程序生成的根目录下面的makefile里面就有如下一段:
examples\$(MAKEFILE):
@$(CHK_DIR_EXISTS) examples\ $(MKDIR) examples\
cd examples\ && $(QMAKE) e:\Qt_compl\qt-src-4.8.4\examples\examples.pro -spec ..\mkspecs\win32-msvc2008 -o $(MAKEFILE)
sub-examples: examples\$(MAKEFILE) FORCE
@set MAKEFLAGS=$(MAKEFLAGS)
cd examples\ && $(MAKE) -f $(MAKEFILE)
sub-examples-all: examples\$(MAKEFILE) FORCE
@set MAKEFLAGS=$(MAKEFLAGS)
cd examples\ && $(MAKE) -f $(MAKEFILE) all
sub-examples-clean: examples\$(MAKEFILE) FORCE
@set MAKEFLAGS=$(MAKEFLAGS)
cd examples\ && $(MAKE) -f $(MAKEFILE) clean
sub-examples-install_subtargets-ordered: examples\$(MAKEFILE) sub-translations-install_subtargets-ordered
@set MAKEFLAGS=$(MAKEFLAGS)
cd examples\ && $(MAKE) -f $(MAKEFILE) install
这里只保留了一些我关心的submake规则,有submak, submak all,clean install。@set MAKEFLAGS=$(MAKEFLAGS)表示导入全局的flags规则,然后cd到具体的文件夹下面这里是examples,然后执行make 操作,-f指定makefile文件。至于后面的all
clean install就要看具体的子目录的makefile的编写的时候的伪目标了,也就是all,clean和install如何编写的。
那么我现在输入:
E:\Qt_compl\qt-src-4.8.4&nmake sub-examples
Microsoft (R) Program Maintenance Utility Version 9.00.30729.01
Copyright (C) Microsoft Corporation.
All rights reserved.
cd examples\ && &D:\Program Files\Microsoft Visual Studio 9.0\VC\BIN\nmake.exe& -f Makefile
Microsoft (R) Program Maintenance Utility Version 9.00.30729.01
Copyright (C) Microsoft Corporation.
All rights reserved.
cd network\ && &D:\Program Files\Microsoft Visual Studio 9.0\VC\BIN\nmake.exe& -f Makefile
.......后面省略
4、有第三点可以得出另一个结论,只要整体模块比如examples开启了编译,那么就可以进入到子目录做单个文件夹的nmake了:
E:\Qt_compl\qt-src-4.8.4&cd examples/network/qftp
E:\Qt_compl\qt-src-4.8.4\examples\network\qftp&nmake
Microsoft (R) Program Maintenance Utility Version 9.00.30729.01
Copyright (C) Microsoft Corporation.
All rights reserved.
&D:\Program Files\Microsoft Visual Studio 9.0\VC\BIN\nmake.exe& -f Makefile.Debug all
Microsoft (R) Program Maintenance Utility Version 9.00.30729.01
Copyright (C) Microsoft Corporation.
All rights reserved.
&D:\Program Files\Microsoft Visual Studio 9.0\VC\BIN\nmake.exe& -f Makefile.Release all
Microsoft (R) Program Maintenance Utility Version 9.00.30729.01
Copyright (C) Microsoft Corporation.
All rights reserved.
E:\Qt_compl\qt-src-4.8.4\examples\network\qftp&nmake all
Microsoft (R) Program Maintenance Utility Version 9.00.30729.01
Copyright (C) Microsoft Corporation.
All rights reserved.
&D:\Program Files\Microsoft Visual Studio 9.0\VC\BIN\nmake.exe& -f Makefile.Debug all
Microsoft (R) Program Maintenance Utility Version 9.00.30729.01
Copyright (C) Microsoft Corporation.
All rights reserved.
&D:\Program Files\Microsoft Visual Studio 9.0\VC\BIN\nmake.exe& -f Makefile.Release all
Microsoft (R) Program Maintenance Utility Version 9.00.30729.01
Copyright (C) Microsoft Corporation.
All rights reserved.
E:\Qt_compl\qt-src-4.8.4\examples\network\qftp&nmake clean
Microsoft (R) Program Maintenance Utility Version 9.00.30729.01
Copyright (C) Microsoft Corporation.
All rights reserved.
&D:\Program Files\Microsoft Visual Studio 9.0\VC\BIN\nmake.exe& -f Makefile.Debug clean
Microsoft (R) Program Maintenance Utility Version 9.00.30729.01
Copyright (C) Microsoft Corporation.
All rights reserved.
del tmp\moc\debug_static\moc_ftpwindow.cpp
del tmp\rcc\debug_static\qrc_ftp.cpp
del tmp\obj\debug_static\ftpwindow.obj tmp\obj\debug_static\main.obj tmp\obj\debug_static\moc_ftpwindow.obj tmp\obj\d
ebug_static\qrc_ftp.obj
del tmp\obj\debug_static\qftp.intermediate.manifest debug\qftp.ilk vc*.pdb vc*.idb
&D:\Program Files\Microsoft Visual Studio 9.0\VC\BIN\nmake.exe& -f Makefile.Release clean
Microsoft (R) Program Maintenance Utility Version 9.00.30729.01
Copyright (C) Microsoft Corporation.
All rights reserved.
del tmp\moc\release_static\moc_ftpwindow.cpp
del tmp\rcc\release_static\qrc_ftp.cpp
del tmp\obj\release_static\ftpwindow.obj tmp\obj\release_static\main.obj tmp\obj\release_static\moc_ftpwindow.obj tmp
\obj\release_static\qrc_ftp.obj
del tmp\obj\release_static\qftp.intermediate.manifest
del &tmp\obj\debug_static\qftp.intermediate.manifest&
Could Not Find E:\Qt_compl\qt-src-4.8.4\examples\network\qftp\tmp\obj\debug_static\qftp.intermediate.manifest
del qftp.ilk
Could Not Find E:\Qt_compl\qt-src-4.8.4\examples\network\qftp\qftp.ilk
del vc*.pdb
Could Not Find E:\Qt_compl\qt-src-4.8.4\examples\network\qftp\vc*.pdb
del vc*.idb
Could Not Find E:\Qt_compl\qt-src-4.8.4\examples\network\qftp\vc*.idb
E:\Qt_compl\qt-src-4.8.4\examples\network\qftp&nmake clean
5、在静态编译的时候,最好是做两个代码文件夹,一个在configure的时候不指定nomake而开启完全编译的makefile,可以完全编译,也可以仅仅用来做submake做我们需要的编译,用来学习(请参考第一点的说明,指定nomake某些文件夹也还是可以生成makefile,编译子文件夹来得到可执行文件的,只是会做一次makefile的重新生成);另一个不编译demos/examples/docs,这样做出来的就是我们需要的一些库和bin文件,用来做开发。
--------------------------------------------------------------------------------------------------------------------------------
第三方库支持
要支持mysql需要的操作,先安装好msyql的驱动,包括头文件和lib文件,在configure的时候指定:
-qt-sql-mysql -I &path to mysql&\include -L &path to mysql&l\lib
同样对于sqlite2,qt也是需要外置的库文件和头文件的支持的,如mysql安装。
对于openssl,也是先安装好,然后在编译的时候指定:
-openssl -I &path to opensll&\include -L &path to opensll&\lib
最后提醒一下,如果没有像上面一样安装过mysql sqlite2 openssl等支持的库和头文件,就在configure里面简单指定&-qt-sql-mysql&&-qt-sql-sqlite2 -openssl,都是无法编译成功的!
至于,openssl的使用下面的文章,应该是一个很好的参考:
版权声明:本文为博主原创文章,未经博主允许不得转载。
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:666076次
积分:9243
积分:9243
排名:第862名
原创:220篇
转载:43篇
评论:410条
阅读:32290
阅读:29930
(1)(1)(1)(1)(2)(1)(1)(2)(2)(5)(22)(3)(8)(1)(1)(7)(2)(3)(5)(9)(1)(1)(1)(3)(1)(1)(2)(1)(1)(1)(3)(1)(3)(6)(1)(2)(2)(8)(14)(11)(22)(15)(9)(10)(7)(1)(6)(12)(18)(19)(3)

我要回帖

更多关于 nmake.exe 的文章

 

随机推荐