使用Visual Studio 2012/Visual Studio 2013构建Qt5并将其集成到IDE中

50
如何让Qt5下载并集成到Visual Studio 2012中?你可能会遇到哪些问题,如何解决这些问题? 关于Visual Studio 2013的更新 也有报道称Visual Studio 2013也可以成功集成,并且笔记正在维护中。
此外请注意,问题的重点非常强调只是使用Visual Studio 构建 Qt。还有一些有关与Visual Studio IDE集成的注意事项。

注意:此问题/答案链接自上述评论中链接的Qt论坛讨论。 - Dan Nissenbaum
1
@user1899020 很好!...但是,不幸的是,我现在需要在VS2012中构建一个32位版本。 - Dan Nissenbaum
现在我需要在VS2013中构建(在预构建准备好之前)。我感觉到了一种模式吗? - Dan Nissenbaum
另请参见https://dev59.com/mGUp5IYBdhLWcg3w8LB4#14932316。 - Dan Nissenbaum
如何使用Visual Studio 2015编译Qt 5.5的提示如下。 - hatranpro
显示剩余2条评论
5个回答

77
这种方法已经在Visual Studio 2013上测试通过。可以在这里获取使用Visual Studio 2012和2013的预编译二进制文件,包括OpenGL版本。

步骤1:设置

  1. 下载并安装RapidEE 这里。RapidEE是一个Windows环境变量编辑器,对于后续过程(以及一般情况下)非常有用。

  2. 安装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构建将失败

  3. Python.orgAnaconda Python安装适用于Windows的Python(我听说2.6+可用,也可以使用3.3)。

  4. ActiveState安装适用于Windows的Perl。


步骤二:获取(并构建)Qt5(是的,这意味着Git

  1. 请按照qt-project网站上的Windows安装指南进行操作。

    概述

    为了总结上面链接中的详细信息和下面的笔记(如果您有任何错误,请查看下面的笔记;它们可能已经解答了您的问题):

    • 卸载Avast(如果您已安装此软件),以避免构建错误。是的,这意味着卸载它。从系统中彻底删除它。停用无法工作。请参见下面的详细说明。

    • 关于第一步的说明:不要在第一个git pull中使用SmartGit(除非您确实知道自己在做什么),因为SmartGit的默认设置将拉取所有内容,而这不是您想要的。

    • 必须安装Git for Windows

    • 决定您想要放置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-webkitconfigurenmake)。根据您构建 Qt 的位数(32 位或 64 位),您将使用 [32|64] 位命令提示符(x86x64)。如果您在打开命令提示符时安装了 perl(确保它在 PATH 中),则需要重新启动命令提示符才能将 perl 识别为命令。

      当运行“init-repository”(来自上面链接中的步骤)时,文档并不清楚,但必须通过perl执行它;即perl ./init-repository --no-webkit。然而,configurenmake命令是直接调用的。
      传递给configure的一个非常有用的选项是-mp,它使Qt在多个核心上并行构建,显着加快了(长时间的)构建时间。
      要指定输出文件夹,请将-prefix [outfolder]添加到configure命令中。例如,使用-prefix %CD%\output\x64\vc12将是适合64位Visual Studio 2013(12.0)构建的一个合适的输出(子)文件夹。
      Unicode支持(ICU)
      如果您需要Unicode支持(通过ICU),请特别注意上面链接中的说明。总之,ICU必须在VS 2012中从头构建,因为Windows的唯一预构建ICU二进制文件适用于VS 2010。在VS 2012中构建是很容易的 - 只需在 \ icu \ source \ allinone中找到ICU解决方案(.sln),并以调试和发布模式构建(根据构建Qt的模式选择32位或64位模式 - 不要在其他位数上构建,因为ICU将使用二进制文件覆盖输出文件夹)。 (Qt构建过程将正确定位ICU的调试与发布版本。)它应该可以无错误地构建。然后,在一个(可能是新的)Windows环境变量中添加路径<icuroot>\lib作为字符串条目,称为“LIB”(即使只有1个条目,在RapidEE中将LIB设置为“可展开的字符串”),并在<icuroot>\include中添加路径作为字符串条目,称为“INCLUDE”(注意:将这些路径添加到PATH变量中将不起作用)。构建Qt之后,您可以删除刚刚添加的所有这些条目。此外,确实将ICU dll的运行时路径(<icuroot>\bin)添加到环境的PATH变量中,否则Qt构建过程(特别是当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 构建;请参阅注释)。

      因此,下载所有必要的Qt源文件的步骤为: 1. 使用Windows命令行执行初始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获取的默认子模块就足够了。 如果您知道或后来发现其他(非默认)模块,则始终可以稍后添加它们。
      一些与路径相关的问题很重要(摘自上面链接的文档):“请确保在perl可执行文件之前找到perl可执行文件,因为后者已过时”;和“如果sh.exe在您的PATH中,您可能无法构建(例如由于git或msys安装)。这种错误是由qt5-srcqtbasebinqmake.exe:command not found等提示的。在这种情况下,请确保sh.exe不在您的路径中。如果您的安装已经配置,则必须重新配置。”
      在此过程中,您可能会遇到使用nmake文件时出错。如果是这样,请进入该目录并强制构建该问题文件。然后再次开始Qt5的nmake过程。
      Qt5的编译可能需要很长时间(甚至长达数小时,即使使用了-mp多线程选项)。耐心等待。
      步骤3:将Qt5集成到Visual Studio 2012中
      1.下载并安装Visual Studio Qt5插件。它在页面底部的“其他下载”部分中,不适用于Visual Studio Express。
      2.打开Visual Studio 2012,转到Qt Options(在顶部菜单栏上的“Qt5”下)。
      3.在Qt版本选项卡中,请检查是否已经有Qt5。如果没有,请单击添加,选择一个版本名称(可能是5.x.x之类的名称),然后导航到包含qmake.exe的文件夹(通常为C:\Qt\qt5\qtbase)。
      4.退出Qt选项对话框。
      5.创建一个新的Visual Studio项目。当您看到新项目对话框时,您应该看到Qt5 Projects模板选项。
      6.创建新的Qt项目后,右键单击它,然后选择“转换为由QMake生成的项目”。构建项目,然后再次右键单击它并选择“将项目转换为Qt Add-in项目”。再次构建,然后运行。现在您应该有一个工作的Qt项目了。
      将Qt5添加到现有的Visual Studio 2012 VC ++项目
      右键单击VS中的项目,然后选择“取消加载项目”。再次右键单击该项目,然后选择“编辑[project name].vcxproj”。这将打开项目文件,以便您可以向其中添加Qt5。
      在全局PropertyGroup中,添加或更改<Keyword>为Qt4VSv1.0。
      重新加载项目,然后右键单击并选择“将项目转换为Qt Add-in项目”
      等待转换完成(不需要超过几秒钟),然后选择Qt5>项目设置。转到模块选项卡,检查您的项目要依赖哪些模块(基本模块为CoreWidgetsGUI)。
      按照此处的步骤添加目录$(QTDIR)\include
      注意:如果您在任何时候包含windows.h,则需要在执行此操作之前#define NOMINMAX以避免与qdatetime.h冲突。
      完成上述步骤后,可以通过选择Qt5>创建基本.pro文件

1
非常棒。 (我从您在Qt论坛上发布的链接中发现了这个)。 我希望这个链接能够在Qt网站上得到宣传并进一步完善。 我即将开始使用VS 2012(和VS 2010 SP1)进行此操作。 如果有任何有用的补充,我会添加进去。 - Dan Nissenbaum
1
@DanNissenbaum 希望这能帮到你。记得更新遇到的问题。 - MirroredFate
1
以上问题已解决:https://dev59.com/2XDYa4cB1Zd3GeqPEtIF#15955621。我已经将这些信息整合到维基中。 - Dan Nissenbaum
有人向 Avast 报告了这个错误吗?是否有关于这个错误报告的链接? - Jonathan Baldwin
1
那好吧,算了。我需要一个与软件开发工具兼容且开发人员能够响应错误报告的杀毒软件。Avast 又失去了一个用户。 - Jonathan Baldwin
显示剩余23条评论

10

我已经成功将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集成”进行操作。


6
我想提醒您,Visual Studio 2012 版本的 Qt 5.2 有一个预构建版本可供使用,您可以在 http://qt-project.org/downloads 下载。因此,如果您对从源代码构建 Qt 5 没有特别的兴趣,也可以使用预编译的二进制文件。

Tver-Soft 网站 上还提供了多个不同编译器版本的预编译 (x64) 二进制文件。


所以我不需要像“qt”安装程序一样下载其他任何东西。 - Anish Silwal

4
我终于能够在Windows 8 x64上使用Visual Studio 2012编译带有QWebKit的QT 5.1(git)并且想和那些也遇到问题的人分享我的经验。我按照上述帖子中的步骤1和2进行了尝试。我试着做第3步,但是SmartGit拉了一堆额外的项目,这些项目无法与Qt5一起编译。我通过从不同的分支克隆(例如https://qt.gitorious.org/qt/qt3d/)来解决大部分问题,但这变得过于繁琐,因此我决定不编译任何额外的模块。ICU support in a 32-bit build of Qt5 with the VS2012 compiler causes Qt5 build failure; Webkit is also therefore unbuildable上的帖子告诉我如何解决ICU问题。

下载源代码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

在这一点上,我开始怀疑没有人尝试过我正在做的事情,因为nmake开始抱怨makefiles中有意外的行(所有这些文件都有DerivedSources扩展名,例如Makefile.JavaScriptCore.DerivedSources和Makefile.WebCore.DerivedSources)。
(set PATH=<stuff>;%PATH%) && ....

在运行 nmake 之前,请手动设置 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)。


我认为(但不确定)你的问题很大一部分是使用了SmartGet。你不应该在最初的拉取中使用它... - MirroredFate
SmartGit会盲目地拉取所有内部模块,即使不应该包含在内的模块也会被拉取。尝试构建它们将导致构建错误。对于初始构建步骤,仅拉取必要的模块非常重要,不要多拉取。 - Dan Nissenbaum

2

使用Visual Studio 2015编译Qt 5.5:

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

在配置IT技术方面的软件时,使用如上命令可以进行配置。请注意保留html标签。

3- nmake

使用以上命令可以进行编译。请注意保留html标签。

我不需要编辑configure.bat来构建Qt,但我无法构建所有的Qt,即QtWebEngine。 - Arc

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接