此外请注意,问题的重点非常强调只是使用Visual Studio 构建 Qt。还有一些有关与Visual Studio IDE集成的注意事项。
下载并安装RapidEE 这里。RapidEE是一个Windows环境变量编辑器,对于后续过程(以及一般情况下)非常有用。
安装DirectX 11 SDK。现在它已经成为Windows 8 SDK的一部分,因此您首先必须安装DirectX 10 SDK,您可以从这里获取(但请参见下一句中的警告)。如果您已经安装了Visual C++ 2010 Redistributable Package(您可能已经安装了它,因为它会随VS 2010自动安装),请按照这里所述的步骤协助安装DirectX 10。一旦您安装了DirectX 10 SDK,请下载并安装Windows 8 SDK 这里,其中包含DirectX 11 SDK。是的,这很麻烦,但除非您知道自己是否拥有DirectX 11 SDK,否则Qt构建将失败。
从Python.org或Anaconda Python安装适用于Windows的Python(我听说2.6+可用,也可以使用3.3)。
从ActiveState安装适用于Windows的Perl。
请按照qt-project网站上的Windows安装指南进行操作。
概述
为了总结上面链接中的详细信息和下面的笔记(如果您有任何错误,请查看下面的笔记;它们可能已经解答了您的问题):
卸载Avast(如果您已安装此软件),以避免构建错误。是的,这意味着卸载它。从系统中彻底删除它。停用它无法工作。请参见下面的详细说明。
关于第一步的说明:不要在第一个git
pull中使用SmartGit(除非您确实知道自己在做什么),因为SmartGit的默认设置将拉取所有内容,而这不是您想要的。
决定您想要放置Qt
安装的位置,并从任何命令提示符窗口的目录中cd
到将包含新安装的目录。(由于该过程非常脆弱且容易出错,我个人将其直接放在C:
中,但这可能并不必要)。
从上述目录执行:
git clone git://gitorious.org/qt/qt5.git qt5
这很快。完成后,您应该在“稳定”分支上,但是您始终可以在cd
进入新创建的qt5
目录后运行git checkout stable
,以确保正确。使用git checkout 5.4.1
已确认可与VS2013 64位一起使用。
关闭当前命令提示符窗口(如果它不是Visual Studio命令提示符窗口),然后进行下一步。这是为了确保您在接下来的步骤中使用Visual Studio命令提示符窗口。
接下来运行32位(x86)或64位VS工具命令提示符(取决于您是否正在构建Qt5为32位或64位)。要访问此选项,您必须通过开始菜单找到它-转到Program Files
->[Microsoft] Visual Studio 2012/2013
->Visual Studio Tools
,然后您将在其中看到一个有趣的名称;名称应包括短语Native Tools
;32位版本将在名称中具有x86
,而64位版本将在名称中具有x64
。
从上面的目录中cd
进入新创建的qt5
目录。
从Visual Studio命令提示符中,必须下载Qt子模块的其余部分:
perl ./init-repository --no-webkit
执行此步骤需要一些时间,因为它必须下载很多内容,但是在良好的连接下不太糟糕。
然后下载任何剩余的可选子模块,init-repository
不会下载-只有从这个阶段开始,SmartGit才能正常工作(请参见下面的注
注意:
通用注意事项
如果您从上面链接的文档中感到困惑,只需知道 ANGLE 库(默认情况下)将被使用,而不是 OpenGL,这就是为什么您需要安装 DirectX 11 的原因。
请确保您使用 VS Native Tools 命令提示符来运行上述链接中的所有命令(即perl .\init-repository --no-webkit
、configure
和nmake
)。根据您构建 Qt 的位数(32 位或 64 位),您将使用 [32|64] 位命令提示符(x86
或 x64
)。如果您在打开命令提示符时安装了 perl(确保它在 PATH
中),则需要重新启动命令提示符才能将 perl 识别为命令。
perl
执行它;即perl ./init-repository --no-webkit
。然而,configure
和nmake
命令是直接调用的。configure
的一个非常有用的选项是-mp
,它使Qt在多个核心上并行构建,显着加快了(长时间的)构建时间。-prefix [outfolder]
添加到configure
命令中。例如,使用-prefix %CD%\output\x64\vc12
将是适合64位Visual Studio 2013(12.0)构建的一个合适的输出(子)文件夹。
uic.exe
运行时)将会出现欺骗性和误导性错误。最后,在configure
命令行中(下面),确保添加-icu
作为附加的命令行参数。
ICU 失败:
目前,在使用 VS2012 编译器时启用 ICU 时,构建 Qt5 似乎存在一个 bug。具体来说,qtbase\src\corelib\codecs\qtextcodec.cpp
的第 688 行(Qt5 v5.02)无法为编解码器名称 "US-ASCII" 返回编解码器(该编解码器为 NULL),导致稍后尝试取消引用编解码器时 "lrelease.exe" 崩溃(我已经失去了该文件/行号的追踪,但它是一个明显的 NULL codec
变量的取消引用)。不幸的是,这意味着据我所知,WebKit 不能使用 VS2012 编译器的至少 32 位版本构建 Qt5,因为 WebKit 需要 ICU。
如果有人能够使用 VS2012 编译器启用 ICU 构建 Qt5,请更新此 Wiki。
ICU 澄清:
如果您的路径中有ICU,则Qt会自动构建它。换句话说,标志“-icu”是隐含的。然而,这会导致如上所述的“lrelease.exe”错误。因此,解决方法是在configure命令中添加标志“-no-icu”。额外子模块
如果你想要除了默认子模块之外的其他子模块,你可以在完成init-repository
命令后使用SmartGit(或命令行)。SmartGit可能是最简单的,因为你不需要将路径复制到命令行中,而可以直接使用用户界面。
警告:不要下载可选的qlalr
子模块,因为它不能与整个Qt构建结合使用,并且对于Qt的用户来说不是必需的,只用于内部Qt开发。
警告:必须使用一个 shell 命令行,后面跟着 perl .\init-repository --no-webkit
(而不是 SmartGit);这些步骤将正确地只下载默认的 Qt 子模块。你不能使用 SmartGit 从 git://gitorious.org/qt/qt5.git
克隆和下载 Git 文件,因为 SmartGit 目前无法正确处理子模块。相反,打开标准的 Windows shell 命令提示符(使用任何命令提示应用程序,不一定是 VS 工具命令提示符),然后(假设 Git 在系统上已正确安装;SmartGit 安装可能会自动执行此操作;如果没有,请转到 Git for Windows 并直接安装),从命令行直接键入 git clone git://gitorious.org/qt/qt5.git
;也许跟着 git checkout stable
命令行(我不确定是否默认检出此分支);然后跟着命令行 perl .\init-repository --no-webkit
来拉取默认存储库(除了 WebKit,它需要 ICU,而 ICU 似乎无法在 32 位 Qt5 中使用 VS2012 构建;请参阅注释)。
git clone git://gitorious.org/qt/qt5.git
;
2. 在VS Tools 2012命令提示符中执行perl .\init-repository --no-webkit
;然后可选地
3. 使用SmartGit(来自上面的链接)(或等效工具)打开现有项目(选择Qt5根文件夹),并在SmartGit中执行Pull以下载任何非默认存储库(但不要下载qlalr
)。这就是全部了;您在系统上拥有所有必要和可选的Qt文件(包括子模块)。qlalr
),请更新本Wiki以指定它们。perl .\init-repository --no-webkit
获取的默认子模块就足够了。 如果您知道或后来发现其他(非默认)模块,则始终可以稍后添加它们。nmake
文件时出错。如果是这样,请进入该目录并强制构建该问题文件。然后再次开始Qt5的nmake
过程。Qt Options
(在顶部菜单栏上的“Qt5”下)。qmake.exe
的文件夹(通常为C:\Qt\qt5\qtbase
)。Qt5 Projects
模板选项。<Keyword>
为Qt4VSv1.0。Qt5>项目设置
。转到模块选项卡,检查您的项目要依赖哪些模块(基本模块为Core
、Widgets
和GUI
)。$(QTDIR)\include
。windows.h
,则需要在执行此操作之前#define NOMINMAX
以避免与qdatetime.h
冲突。Qt5>创建基本.pro文件
我已经成功将Qt 5.0.2与Windows 7上的Visual Studio 2012集成,这得益于上述优秀维基和qt-project链接。由于我在某些步骤上稍微有些不同,因此我认为将其发布在这里是有效的:
以下步骤必须按照给定的确切顺序执行:
0 - 卸载Avast(如果您安装了该软件)以避免构建错误。由于Avast的一个漏洞,禁用它将无效;
1 - 安装Git(>= 1.6.x);
2 - 安装Python(>=2.6.x)。[python.org];
3 - 安装Perl(>=5.14)。[activestate.com];
4 - 安装Ruby。[rubyinstaller.org];
5 - 打开Windows 7命令提示符(暂时不使用VS2012开发人员命令提示符);
6 - 选择任何您想要的目录来放置Qt5,但不允许使用空格作为所选路径的一部分。我决定使用路径“C:\qt5”;
7 - 回到Windows 7命令提示符下(在我的情况下,提示“C:\qt5>”),键入:
git clone git://gitorious.org/qt/qt5.git qt5
8- 查看稳定版本:
cd qt5
git checkout stable
9 - 你可能会收到一条确认这个版本已经稳定的消息。关闭命令提示符;
10 - 打开Visual Studio的开发者控制台(所有程序 > Visual Studio 2012 > Visual Studio工具 > VS2012开发人员命令提示符),并将当前目录更改为您选择的目录(在我的示例中为“C:\qt5”);
11 - 下载Qt子模块,忽略webkit(常见的构建错误来源...):
perl .\init-repository --no-webkit
12 - 现在输入这个庞大的命令以正确配置您的构建:
configure -developer-build -opensource -nomake examples -nomake tests -nomake demos -debug-and-release -c++11 -mp -nomake webkit -confirm-license
13 - 接下来,请确保模块 qlalr 不会 被编译。为此,请打开 Windows 资源管理器并导航到您选择的 Qt 目录(例如,在我的示例中是 "C:\qt5"),并检查文件夹 qlalr 是否存在。如果存在,请删除它;
14 - 开始构建... 可能会出现次要模块(如 webkit)的构建错误,但这些错误不会影响主要的 Qt 功能(因为我们之前已经设置了不编译它)。我们可以忽略这些错误,并让独立模块继续构建:
nmake /I /K
15 - 完成集成,请按照上面社区维基的“步骤3:将Qt5与Visual Studio 2012集成”进行操作。
在 Tver-Soft 网站 上还提供了多个不同编译器版本的预编译 (x64) 二进制文件。
下载源代码http://download.icu-project.org/files/icu4c/51.2/icu4c-51_2-src.zip,并添加以下行:
#define U_CHARSET_IS_UTF8 1
将文本写入文件 %ICU%\source\common\unicode\platform.h,其中%ICU%是ICU源代码的路径。
在Visual Studio 2012中打开文件%ICU%\source\allinone\allinone.sln并编译。 将%ICU%\bin添加到您的路径中。
set PATH=%ICU%\bin64;%PATH%
然后我在QT根目录下运行了以下命令
configure -platform win32-msvc2012 -opengl desktop -opensource -debug-and-release -I %ICU%\include -L %ICU%\icu\lib64 -mp -qt-freetype -icu
(set PATH=<stuff>;%PATH%) && ....
(set PATH=<stuff>;%PATH%) && perl -ne "print $1" css\CSSPropertyNames.in ...
perl -ne "print $1" css\CSSPropertyNames.in ...
最后,其中一个文件尝试调用win_flex.exe(或win-flex.exe),而不是flex。我将其更改为flex.exe,最终编译成功(必须更改两次,因为我认为文件已经重新生成)。
使用QWebKit并链接到此构建的程序的简要体验使我相信一切都很好。
--更新--
仅为完整起见。根据在Windows shell脚本中,(set PATH = ...;% PATH:)= ^)%)的含义是什么,以及如何在Qt5 nmake构建的上下文中克服此行的失败?(指向http://qt-project.org/forums/viewthread/20605),使用jsom而不是nmake应该能够解决大多数Makefile问题(尽管我仍然想知道win-flex.exe)。
1- 在qtbase目录中修改configure.bat文件,使其能够生成configure.exe(仅修改前18行)
@echo off
set QTSRC=%~dp0
set QTDIR=%CD%
rem if not exist %QTSRC%.gitignore goto sconf
echo Please wait while bootstrapping configure ...
for %%C in (cl.exe icl.exe g++.exe perl.exe) do set %%C=%%~$PATH:C
rem if "%perl.exe%" == "" (
rem echo Perl not found in PATH. Aborting. >&2
rem exit /b 1
rem )
if not exist mkspecs (
md mkspecs
if errorlevel 1 goto exit
)
rem perl %QTSRC%bin\syncqt.pl -minimal -module QtCore -outdir "%QTDIR%" %QTSRC%
rem if errorlevel 1 goto exit
2- configure -opensource -confirm-license -mp -nomake examples -nomake tests -release -c++11 -no-warnings-are-errors -platform win32-msvc2015 -no-ltcg
3- nmake