Qt Creator编译方法总结(Windows平台)

老邓 2010-12-07 06:34:19
一、编译准备
编译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变成类似make -j<n>的工具。
下载:git clone git://gitorious.org/qt-labs/jom.git Jom
配置:qmake CONFIG+=release jom.pro
编译:nmake release
拷贝bin目录至qt所在目录即可!

五、加速命令行编译
如果你想加速你的命令行编译,则你需要利用第四步得到的jom.exe,将第二步中的nmake改成jom即可
...全文
3579 23 打赏 收藏 转发到动态 举报
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
mincau 2013-08-08
  • 打赏
  • 举报
回复
上面是用 qtc编译的报错,我换用 qmake+nmake 编译也卡在了 生成 QtConcurrent.lib这块
mincau 2013-08-08
  • 打赏
  • 举报
回复
我编译的时候老报找不到 lib的错误,我找了下,没有生成相应的lib文件, 下面是编译输出: cd src\ && C:\Qt\qtcreator-2.6.1\bin\jom.exe -f Makefile cd libs\ && C:\Qt\qtcreator-2.6.1\bin\jom.exe -f Makefile cd qtconcurrent\ && C:\Qt\qtcreator-2.6.1\bin\jom.exe -f Makefile C:\Qt\qtcreator-2.6.1\bin\jom.exe -f Makefile.Release C:\Qt\4.5.3\bin\moc.exe -DUNICODE -DWIN32 -DQT_LARGEFILE_SUPPORT -DBUILD_QTCONCURRENT -DIDE_LIBRARY_BASENAME=\"lib\" -DQT_NO_CAST_TO_ASCII -DQT_USE_STRINGBUILDER_FOR_CONCATENATION -DQT_USE_OPERATOR_PLUS_FOR_CONCATENATION -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB -DQT_THREAD_SUPPORT -I"c:\Qt\4.5.3\include\QtCore" -I"c:\Qt\4.5.3\include\QtGui" -I"c:\Qt\4.5.3\include" -I"..\..\..\..\qt-creator-qt-creator\src\libs" -I"d:\work\qt\1.2\qt-creator-qt-creator\tools" -I"c:\Qt\4.5.3\include\ActiveQt" -I"release" -I"..\..\..\..\qt-creator-qt-creator\src\libs\qtconcurrent" -I"." -I"c:\Qt\4.5.3\mkspecs\win32-msvc2008" -D_MSC_VER=1500 -DWIN32 ..\..\..\..\qt-creator-qt-creator\src\libs\qtconcurrent\multitask.h -o release\moc_multitask.cpp cl -c -nologo -Zm200 -Zc:wchar_t- -O2 -MD -W3 -w34100 -w34189 -DUNICODE -DWIN32 -DQT_LARGEFILE_SUPPORT -DBUILD_QTCONCURRENT -DIDE_LIBRARY_BASENAME=\"lib\" -DQT_NO_CAST_TO_ASCII -DQT_USE_STRINGBUILDER_FOR_CONCATENATION -DQT_USE_OPERATOR_PLUS_FOR_CONCATENATION -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB -DQT_THREAD_SUPPORT -I"c:\Qt\4.5.3\include\QtCore" -I"c:\Qt\4.5.3\include\QtGui" -I"c:\Qt\4.5.3\include" -I"..\..\..\..\qt-creator-qt-creator\src\libs" -I"d:\work\qt\1.2\qt-creator-qt-creator\tools" -I"c:\Qt\4.5.3\include\ActiveQt" -I"release" -I"..\..\..\..\qt-creator-qt-creator\src\libs\qtconcurrent" -I"." -I"c:\Qt\4.5.3\mkspecs\win32-msvc2008" -Forelease\ @C:\Users\Anime\AppData\Local\Temp\moc_multitask.obj.9856.265.jom moc_multitask.cpp link /LIBPATH:"c:\Qt\4.5.3\lib" /NOLOGO /INCREMENTAL:NO /MANIFEST /MANIFESTFILE:"release\QtConcurrent.intermediate.manifest" /OUT:..\..\..\lib\qtcreator\QtConcurrent.lib @C:\Users\Anime\AppData\Local\Temp\QtConcurrent.lib.9856.1326.jom 正在创建库 ..\..\..\lib\qtcreator\QtConcurrent.lib 和对象 ..\..\..\lib\qtcreator\QtConcurrent.exp LINK : fatal error LNK1104: 无法打开文件“..\..\..\lib\qtcreator\QtConcurrent.lib” jom: D:\work\qt\1.2\qtcreator-build-local64-Release\src\libs\qtconcurrent\Makefile.Release [..\..\..\lib\qtcreator\QtConcurrent.lib] Error 1104 jom: D:\work\qt\1.2\qtcreator-build-local64-Release\src\libs\qtconcurrent\Makefile [release] Error 2 jom: D:\work\qt\1.2\qtcreator-build-local64-Release\src\libs\Makefile [sub-qtconcurrent-make_default-ordered] Error 2 jom: D:\work\qt\1.2\qtcreator-build-local64-Release\src\Makefile [sub-libs-make_default-ordered] Error 2 jom: D:\work\qt\1.2\qtcreator-build-local64-Release\Makefile [sub-src-make_default-ordered] Error 2 21:06:58: 进程"C:\Qt\qtcreator-2.6.1\bin\jom.exe"退出,退出代码 2 。 Error while building/deploying project qtcreator (kit: local64) 帮忙看下啥问题
candeabc123 2012-06-05
  • 打赏
  • 举报
回复
看到了 就算结了贴也要收藏下 谢谢!
老邓 2011-09-28
  • 打赏
  • 举报
回复
文档要单独编译。这是最新编译的批处理:
@echo off

qmake "CONFIG+=release" ..\QtCreator\QtCreator.pro
jom
nmake docs

if %errorlevel% neq 0 goto error

set DESTDIR=D:\MrDeng\DEVx86\qt
nmake INSTALL_ROOT=%DESTDIR% install

rem qmldesigner
if not exist %DESTDIR%\lib\qmldesigner mkdir %DESTDIR%\lib\qmldesigner
xcopy /D /Y %~dp0\lib\qmldesigner\*.dll %DESTDIR%\lib\qmldesigner
rem qtcreatorcdbext32
if not exist %DESTDIR%\lib\qtcreatorcdbext32 mkdir %DESTDIR%\lib\qtcreatorcdbext32
xcopy /D /Y %~dp0\lib\qtcreatorcdbext32\*.dll %DESTDIR%\lib\qtcreatorcdbext32
rem other
xcopy /D /Y %~dp0\bin\*.* %DESTDIR%\bin
rem docs
xcopy /D /S /Y /I %~dp0\share\doc %DESTDIR%\share\doc

goto success

:error
echo 编译失败!
goto finish

:success
echo 编译成功!
goto finish

:finish
老邓 2011-09-20
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 zjfshowtime 的回复:]

为什么我的源码解压没有你们说的那个
corelib\kernel\qwineventnotifier_p.h,我这编译一直过不去啊
[/Quote]
自已从Qt的源码中拷贝。
这是一条批处理:
@echo off
cd qt-everywhere-opensource-src-4.7.4
xcopy /S /I include\*_p.h ..\private\include
xcopy /S /I src\*_p.h ..\private\src
pause
zjfshowtime 2011-09-20
  • 打赏
  • 举报
回复 1
为什么我的源码解压没有你们说的那个
corelib\kernel\qwineventnotifier_p.h,我这编译一直过不去啊

xunxun 2010-12-10
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 loaden 的回复:]

引用 15 楼 xunxun1982 的回复:

恩,我原来不知道jom,不知道gcc编译的有jom没(我编译时没注意),gcc编译时mingw32-make -jN开关没作用

jom只针对VC编译器的nmake使用。
mingw32-make的-jN选项有bug,在参数较多时,或者特定情况下,会导致编译失败或无效。
原因未明。
[/Quote]
这个是因为make源码是基于posix thread的,对win32 thread支持不好。
老邓 2010-12-10
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 xunxun1982 的回复:]

恩,我原来不知道jom,不知道gcc编译的有jom没(我编译时没注意),gcc编译时mingw32-make -jN开关没作用
[/Quote]
jom只针对VC编译器的nmake使用。
mingw32-make的-jN选项有bug,在参数较多时,或者特定情况下,会导致编译失败或无效。
原因未明。
xunxun 2010-12-10
  • 打赏
  • 举报
回复
恩,我原来不知道jom,不知道gcc编译的有jom没(我编译时没注意),gcc编译时mingw32-make -jN开关没作用
老邓 2010-12-10
  • 打赏
  • 举报
回复
把Qt最新源码解压到E:\qt-src-4.7.1,设置环境变量(cmd.bat)
@echo off
set QTDIR=%CD%\qt
set QMAKESPEC=win32-msvc2010
set PATH=%CD%\bin;%CD%\share;%QTDIR%\bin;%PATH%
set INCLUDE=%CD%\include
set LIB=%CD%\lib
if not {%1}=={-noqtc} qtc.bat

其中qtc.bat内容:
@echo off
start %CD%\qt\bin\qtcreator.exe -settingspath %CD%\qt\config

通过一个lnk来启动cmd.bat:
%comspec% /k ""%CD%\cmd.bat" -noqtc"

起始位置为%CD%
则在启动控制台后,可以轻松的通过批处理:
@echo off
qmake "CONFIG+=release" "QT_PRIVATE_HEADERS=E:/qt-src-4.7.1/include" ..\QtCreator\qtcreator.pro
jom
jom INSTALL_ROOT="D:\MyQTC" install

来实现编译、安装一条龙!
老邓 2010-12-10
  • 打赏
  • 举报
回复
这一条错了:
1. 生成Makefile:qmake "CONFIG+=release" "QT_PRIVATE_HEADERS="E:/qt-everywhere-opensource-src-4.7.1/include" ..\QtCreator\qtcreator.pro

把:"QT_PRIVATE_HEADERS="E:/qt-everywhere-opensource-src-4.7.1/include"
改:"QT_PRIVATE_HEADERS=E:/qt-everywhere-opensource-src-4.7.1/include"

缘梦逍遥 2010-12-10
  • 打赏
  • 举报
回复
不错不错 !!!
Aisy_D 2010-12-09
  • 打赏
  • 举报
回复
现在我开发 x86, arm, wince , 用 QT creator, 甚至 开发 PIC, MSP, C51, AVR 等等 C 项目, 都用 Qt Creator, 用为习惯了 Qt creator 这个轻量级就非常好用的IDE, 和智能的代码提示功能....原本的 MPLAB, IAR IDE我都不习惯, 只有当用Qt creator 写完代码后, 切换到 MPLAB, IAR ,点一下编译按钮, 就OK 了 .... 所有的 C, C++ 代码我都用 QT creator....非常棒...
pmars 2010-12-09
  • 打赏
  • 举报
回复
问老邓一下,VS平台下能应用QT的库么?
怎么引用?
老邓 2010-12-09
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 pmars 的回复:]
问老邓一下,VS平台下能应用QT的库么?
怎么引用?
[/Quote]
VS只是提供了一个VC编译器,其他没区别。
老邓 2010-12-09
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 aisy_d 的回复:]
现在我开发 x86, arm, wince , 用 QT creator, 甚至 开发 PIC, MSP, C51, AVR 等等 C 项目, 都用 Qt Creator, 用为习惯了 Qt creator 这个轻量级就非常好用的IDE, 和智能的代码提示功能....原本的 MPLAB, IAR IDE我都不习惯, 只有当用Qt creator 写完代码后, 切换到 MPLAB, IAR ,点一下……
[/Quote]
都使用qmake生成Makefile?还是CMake?
AAA20090987 2010-12-08
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 loaden 的回复:]

只是总结一下,省得丢了。
同时,也方便其他用户。

不过,这个版块实在是太冷清了。
[/Quote]

同感
有很多QT问题都放到了UNIX区或C++区了
可能还有很多人不知道这个区吧,呵呵。
chenzhp 2010-12-07
  • 打赏
  • 举报
回复
我来做记号。
老邓 2010-12-07
  • 打赏
  • 举报
回复
只是总结一下,省得丢了。
同时,也方便其他用户。

不过,这个版块实在是太冷清了。
yhf365 2010-12-07
  • 打赏
  • 举报
回复
不错, 收藏了~

16,235

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧