50

如何让 Qt5 下载并与 Visual Studio 2012 集成?您会遇到哪些问题,您如何解决这些问题?

更新重新。视觉工作室 2013

Visual Studio 2013 也报告了成功,并且正在为 VS 2013 维护注释。

另请注意,问题的重点是仅使用 Visual Studio构建Qt。还有关于与 Visual Studio IDE 集成的注意事项

4

5 回答 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安装 Perl for Windows 。


第 2 步:Gitting(和构建)Qt5(是的,这意味着 Git

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

    概括

    总结以上链接和以下注释的详细信息(如果您有任何错误,请参阅以下注释;他们可能会得到答复):

    • 卸载 Avast(如果您已安装)以避免构建错误。是的,字面意思是卸载它。将其从系统中 100% 删除。 停用它将不起作用。请参阅下面的详细说明。

    • 第一步的注意事项:不要在git下面的第一次拉动中使用 SmartGit(除非您真的知道自己在做什么),因为 SmartGit 的默认设置会拉动所有内容,这不是您想要的。

    • 必须安装适用于 Windows 的 Git 。

    • 从任何命令提示符窗口中确定要放置Qt安装的位置,以及cd将包含新安装的目录。(因为这个过程很脆弱,容易出错,所以我个人直接把它放在了C:,但这可能没有必要)。

    • 从上面的目录,执行:

      git clone git://gitorious.org/qt/qt5.git qt5

      这很快。完成后,您应该在“稳定”分支上,但您始终可以在进入新创建的目录git checkout stable后运行,以确保。确认使用VS2013 64 位。cdqt5git checkout 5.4.1

    • 在继续下一步之前,关闭当前的命令提示符窗口(如果它不是 Visual Studio 命令提示符窗口)。这是为了确保您在后续步骤中使用 Visual Studio 命令提示符窗口。

    • 接下来运行 32 位 (x86) 或 64 位 VS Tools 命令提示符(取决于您将 Qt5 构建为 32 位还是 64 位)。要访问它,您必须通过“开始”菜单找到它 - 转到Program Files-> [Microsoft] Visual Studio 2012/2013-> Visual Studio Tools,您会在那里看到一个有趣的名字;名称应包含短语Native Tools;32 位版本将x86在名称中,64 位版本将x64在名称中。

    • cdqt5从上述步骤进入新创建的目录。

    • 从 Visual Studio 命令提示符中,必须下载 Qt 子模块的其余部分:

      perl ./init-repository --no-webkit

      执行此步骤需要一些时间,因为它必须下载很多,但在良好的连接上并不算太糟糕。

    • 然后下载任何剩余的init-repository未下载的可选子模块 - SmartGit 仅在此阶段开始运行良好(请参阅下面的评论)。

    • Qt 下载完成后,以下命令准备构建环境(也应使用 [32|64] VS Native Tools 命令提示符执行):

      configure -developer-build -opensource -confirm-license -mp -nomake examples -nomake tests -debug-and-release -c++11 -no-warnings-are-errors -platform win32-msvc2012.

      此命令行的注意事项:该c++11选项在 VS2012 编译器中可能不是必需的,但适用于 VS2013;-no-warnings-are-errors如果您在 ANGLE 的 64 位自动构建中遇到错误,这是必要的;-platform自动设置为win32-msvc2012,因此默认情况下使用 32 位构建的 Qt,并且 -platform 可能不需要在命令行中提供(即使您安装了以前版本的 VS)。对于 VS2013,使用-platform win32-msvc2013.

      执行此步骤需要几分钟,但还不错。

    • 最后,在系统上实际构建 Qt 的命令(也在 VS Native Tools 命令提示符内运行)很简单:

      nmake

      预计要等待数小时才能完成构建。 如果您指定了一个输出文件夹-prefix(请参见下面的注释),则使用nmake install,否则就是这样。


笔记:

一般注意事项

如果您对上面链接的文档感到困惑,只是一个仅供参考,将使用 ANGLE 库(默认情况下)而不是 OpenGL,这就是您必须安装上面的 DirectX 11 的原因。

确保使用 VS Native Tools 命令提示符运行上述链接中的所有命令(即perl .\init-repository --no-webkitconfigurenmake)。您将使用 [32|64] 位命令提示符(x86x64),具体取决于您将 Qt 构建为 32 位还是 64 位。如果您在打开命令提示符的情况下安装 perl(确保它位于 中PATH),则需要重新启动命令提示符才能将 perl 识别为命令。

运行“init-repository”(来自上述链接中的步骤)时,文档中并不清楚,但您必须通过执行此操作perl;即perl ./init-repository --no-webkit。然而, configureandnmake命令是直接调用的。

传递给的一个非常有用的选项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 中构建是无痛的 - 只需在 <icuroot>\icu\source 中找到 ICU 解决方案 (.sln) \allinone,并在调试和发布模式下构建(在 32 位或 64 位模式下,取决于您构建 Qt 的模式 - 不要构建其他位,因为 ICU 将覆盖输出文件夹二进制文件)。(Qt 构建过程将正确定位 ICU 的调试与发布构建。)它应该构建没有错误。然后,将 <icuroot>\lib 的路径作为字符串条目添加到(可能)名为“LIB”的新 Windows 环境变量中(您可以为此使用 Rapid EE;使 LIB 成为“可扩展字符串” 在 RapidEE 中,即使只有 1 个条目),并且还将 <icuroot>\include 的路径添加为(可能)名为“INCLUDE”的新 Windows 环境变量中的字符串条目。(注意:将这些路径添加到 PATH 变量将不起作用。)Qt 构建后,您可以删除所有刚刚添加的条目。另外,做将 ICU dll (<icuroot>\bin) 的运行时路径添加到环境的 PATH 变量中,否则 Qt 构建过程(特别是在uic.exe运行时)会产生欺骗性和误导性错误。最后,在configure命令行(如下)上,一定要添加-icu一个额外的命令行参数。

重症监护室故障

目前,当启用 ICU 时,似乎存在使用 VS2012 编译器构建 Qt5 的错误。具体来说,qtbase\src\corelib\codecs\qtextcodec.cpp第 688 行(Qt5 v5.02)未能返回编解码器名称“US-ASCII”的编解码器(编解码器为 NULL),导致“lrelease.exe”在稍后尝试取消引用编解码器时崩溃(我已经迷失了方向该文件/行号,但它是 NULLcodec变量的明显取消引用)。不幸的是,这意味着据我所知,WebKit 不能用(至少)32 位的 Qt5 和 VS2012 编译器构建,因为 WebKit 需要 ICU。

如果有人能够使用启用 ICU 的 VS2012 编译器构建 Qt5,请更新此 Wiki 并说明。

ICU 说明

如果你的路径中有 ICU,Qt 会自动构建它。换句话说,标志“ -icu”是隐含的。但是,这会导致上面提到的“lrelease.exe”错误。所以解决这个问题的方法是将标志 -no-icu 添加到配置命令中


附加子模块

如果除了默认子模块之外还需要子模块,您可以在完成命令使用 SmartGit(或命令行)init-repository。SmartGit 可能是最简单的,因为您不需要将路径复制到命令行,而是可以直接使用用户界面。

警告:不要下载 OPTIONAL qlalrSUBMODULE,因为它不会与整个 Qt 构建一起构建,并且对于 Qt 用户来说不是必需的,但仅用于内部 Qt 开发。

警告:必须使用shell 命令行,后跟perl .\init-repository --no-webkit,(不是 SmartGit);这些步骤只会正确下载默认的 Qt 子模块。您不能使用 SmartGit 来克隆和下载 Git 文件,git://gitorious.org/qt/qt5.git因为 SmartGit 当前无法正确处理子模块。相反,打开一个标准的 Windows shell 命令提示符(使用任何命令提示符应用程序,不一定是 VS Tools 命令提示符),并且(假设 Git 已正确安装在系统上;SmartGit 安装可能会或可能不会自动执行此操作;如果没有,去Git for Windows直接安装)git clone git://gitorious.org/qt/qt5.git直接从命令行输入;也许跟随git checkout stable(我不确定这个分支是否默认签出);然后使用命令行perl .\init-repository --no-webkit拉下默认存储库(WebKit 除外,它需要 ICU 和 ICU 似乎无法在 VS2012 的 32 位 Qt5 中构建;请参阅评论)。

因此,下载所有必要的 Qt 源文件的步骤是: 1. 使用 Windows 命令行执行初始git clone git://gitorious.org/qt/qt5.git; 2.perl .\init-repository --no-webkit从 VS Tools 2012 命令提示符中执行;然后可选 3. 使用 SmartGit(来自上面的链接)(或等效项)“打开现有项目”(选择 Qt5 根文件夹)并从 SmartGit 中进行拉取以下载任何非默认存储库(但不要下载qlalr) . 就是这样; 您的系统上有所有必要和可选的 Qt 文件(包括子模块)。

如果有人发现其他可选子模块无法构建和/或仅供内部使用(除了qlalr),请更新此 Wiki 以指定它们。

一般来说,通过默认获取的子模块perl .\init-repository --no-webkit就足够了。如果您知道或稍后发现您的其他(非默认)模块,您可以随时添加它们。


一般问题

如果在某些时候您收到错误说命令“python”(或任何类似的)无法识别,只需检查包含python.exe(或适当的.exe)的文件夹是否是路径变量的一部分。如果不是,请添加它(为方便起见,使用上面提到的 RapidEE)并再次尝试您正在执行的操作。如果它在那里,请确保在将命令添加到路径后重新启动命令提示符。

另外两个与路径相关的问题需要注意(引自与上述链接相关的文档):“确保在 msysgit 提供的 perl 可执行文件之前的路径中找到 perl 可执行文件,因为后者已过时”;和“如果 sh.exe 在您的 PATH 中(例如由于 git 或 msys 安装),您可能无法构建。此类错误由 qt5-srcqtbasebinqmake.exe: command not found 等指示。在这种情况下,请确保 sh.exe 不在您的路径中。如果您的安装已配置,则必须重新配置。 "

在此过程中,您可能会在使用文件时遇到错误nmake。如果这样做,只需进入该目录并强制构建问题文件。nmake然后再次在 Qt5 上开始该过程。


具体问题

警告:您可能需要在 Qt过程中禁用防病毒软件和沙盒nmake(为了安全起见,在整个过程中)。在内部,Qt 执行许多防病毒程序可以干扰的可执行文件(有时是静默)。特别是,如果您有任何沙盒软件,请务必禁用沙盒。

警告: 阿瓦斯特!沙盒用户:Avast 沙盒有一个错误,即使您禁用 Avast 的自动沙盒,沙盒也不会关闭,它会rcc在 Qt 的构建过程中静默沙盒由 Qt 程序自动创建的所有资源文件。对于任何安装了 Avast 自动沙盒功能的用户,即使关闭了自动沙盒功能,Qt 构建总是会失败。解决此问题的唯一方法是完全卸载 AVAST!在构建 Qt 之前从您的系统中获取。您可以重新安装 Avast!Qt构建完成后。


Qt5 的编译可能需要很长时间(几个小时,即使使用 -mp 多线程选项也是如此)。耐心。


第 3 步:将 Qt5 与 Visual Studio 2012 集成

  1. 下载并安装 Visual Studio Qt5 插件。它位于页面底部附近的“其他下载”部分,不适用于 Visual Studio Express。

  2. 打开 Visual Studio 2012,然后转到Qt Options(它在顶部菜单栏的“Qt5”下)。

  3. 在 Qt Versions 选项卡中,检查 Qt5 是否已经存在。如果不是,请单击添加,选择一个版本名称(可能是 5.xx 之类的名称),然后导航到包含qmake.exe(通常C:\Qt\qt5\qtbase)的文件夹。

  4. 退出 Qt 选项对话框。

  5. 创建一个新的 Visual Studio 项目。当您看到“新建项目”对话框时,您应该看到“Qt5 Projects模板”选项。

  6. 有了新的 Qt 项目后,右键单击它并选择“转换为 QMake 生成的项目”。构建项目,然后再次右键单击它并选择“将项目转换为 Qt 插件项目”。再次构建,然后运行。您现在应该有一个工作的 Qt 项目。


将 Qt5 添加到现有的 Visual Studio 2012 VC++ 项目

本部分可能适合您,也可能不适合您。如果您遇到问题或有其他/更好的解决方案,请发表评论或编辑相应的步骤。

  1. 在 VS 中右键单击您的项目,然后选择“卸载项目”。再次右键单击该项目,然后选择“编辑[项目名称].vcxproj”。这将打开项目文件,以便您可以将 Qt5 添加到其中。

  2. 转到 Global PropertyGroup,然后添加或更改<Keyword>为 Qt4VSv1.0。

  3. 重新加载项目,然后右键选择“Convert project to Qt Add-in project”

  4. 等待转换完成(不会超过几秒钟),然后选择Qt5>Project Settings。转到 Modules 选项卡,然后检查您希望项目依赖的模块(基本模块是CoreWidgetsGUI)。

  5. 按照此处的步骤,添加目录$(QTDIR)\include


    笔记:

    如果在任何时候你都包含windows.h,你需要在这样做#define NOMINMAX 之前防止与qdatetime.h.

    完成上述步骤后,您可以通过选择 使您的项目可供 Qt Creator 使用Qt5>Create basic .pro file


尾注:如果您对本指南中包含的信息有任何疑问,请将其作为新问题发布(此处不是答案),并且可能会添加答案或答案的链接。

于 2013-04-09T04:19:38.097 回答
10

基于上面优秀的 wiki 和这个 qt-project 链接,我成功地将 Qt 5.0.2 与 Windows 7 上的 Visual Studio 2012 集成。由于我以稍微不同的方式进行了一些步骤,因此我认为将其发布在此处是有效的:

下面的顺序应该按照给定的确切顺序执行:

0 - 卸载 Avast(如果已安装)以避免构建错误。由于 Avast 错误,停用它将不起作用;

1 - 安装 Git (>= 1.6.x);

2 - 安装 Python (>=2.6.x)。[python.org];

3 - 安装 Perl (>=5.14)。[activestate.com];

4 - 安装红宝石。[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 - Time to build... 可能的构建错误来自辅助模块(例如 webkit),这不会影响 Qt 的主要功能(webkit 本身应该没有问题,因为我们之前已将配置设置为不构建它)。然后我们可以忽略它们并保持构建在独立模块上运行:

nmake /I /K

15 - 要完成集成,请按照上面社区 wiki 的第 3 步(“第 3 步:将 Qt5 与 Visual Studio 2012 集成”)进行操作。

于 2013-05-14T00:17:36.870 回答
6

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

Tver-Soft 网站上还有几个用于不同编译器版本的预编译 (x64) 二进制文件。

于 2013-12-16T17:49:23.293 回答
4

我终于能够使用 Visual Studio 2012 在 Windows 8 x64 上使用 QWebKit 编译 QT 5.1 (git),并认为我会与那些有问题的人分享我的经验。

按照上述帖子中的说明执行步骤 1 和 2。我尝试执行第 3 步,但 SmartGit 提取了一堆无法使用 Qt5 编译的额外项目。我能够通过从不同的 fork(例如https://qt.gitorious.org/qt/qt3d/ )克隆来解决大部分问题,但这对于每个额外的模块来说都太繁琐了,所以我决定不编译任何一位。

ICU support in a 32-bit build of Qt5 with VS2012 compiler 的帖子导致 Qt5 构建失败;因此,Webkit 也无法构建告诉我如何解决 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 开始抱怨 makefile 中的意外行(所有这些都有扩展名 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 并与此构建相关联的程序的简要经验让我相信一切都很好。

- 更新 -

只是为了完整。根据What does (set PATH=...;%PATH:)=^)%) mean in a Windows shell script,以及如何在 Qt5 nmake 构建的上下文中克服这一行的失败?(指向http://qt-project.org/forums/viewthread/20605)大多数Makefile问题应该可以通过使用jsom而不是nmake来解决(尽管我仍然想知道win-flex.exe)

于 2013-08-16T00:47:14.363 回答
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

3-nmake

于 2015-09-23T13:51:27.603 回答