使用Visual Studio 2012 / Visual Studio 2013构buildQt5,并与IDE集成

你如何获得Qt5下载并与Visual Studio 2012集成? 你遇到的一些问题是什么?你如何解决这些问题?

更新重新。 Visual Studio 2013

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

另外请注意, 这个问题的重点强调的只是用Visual Studio 构build Qt。 还有关于与Visual Studio IDE集成的说明

此方法已经过testing,可在Visual Studio 2013上运行。使用Visual Studio 2012和2013的预构build二进制文件在这里可用,包括OpenGL版本。

第1步:设置

  1. 在这里下载并安装RapidEE。 RapidEE是一个Windows环境variables编辑器。 这对于这个过程的其余部分是非常有用的(一般而言)。

  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构build将失败

  3. 从Python.org或Anaconda Python安装用于Windows的Python(我听说2.6+,使用3.3)。

  4. 从ActiveState安装Perl for Windows。


第2步:select (和build设) Qt5 (是的, 这意味着Git )

  1. 请参阅qt-project网站上的Windows安装指南 。

    概要

    总结上述链接和下面的注意事项(如果你有任何错误,请看下面的注意事项;他们可能会被回答):

    • 卸载Avast(如果你已经安装了这个)来避免构build错误。 是的,这意味着卸载它。 从系统中删除它100%。 取消激活它将不起作用 。 见下面的详细说明。

    • 注意第一步 :不要使用SmartGit作为下面的第一个git pull(除非你真的知道你在做什么),因为SmartGit的默认值将会把所有东西都拉出来,而这不是你想要的。

    • 必须安装Git for Windows 。

    • 确定要安装Qt ,然后从任何命令提示符窗口进入包含新安装的目录。 (因为这个过程非常脆弱和容易出错,我个人直接把它放在C: ,但这可能不是必须的)。

    • 从上面的目录中,执行:

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

      这很快。 一旦完成,你应该在'stable'分支上,但是你可以在cd进入新创build的qt5目录后始终运行git checkout stable 。 使用git checkout 5.4.1被确认与VS2013 64位一起工作。

    • 在进入下一步之前, closures当前的命令提示符窗口 (如果它不是Visual Studio命令提示符窗口)。 这是为了确保您在接下来的步骤中使用Visual Studio命令提示符窗口。

    • 接下来运行32位(x86)或64位VS工具命令提示符(取决于您是否将Qt5构build为32位或64位)。 要访问它,你必须通过开始菜单find它 – 进入Program Files – > [Microsoft] Visual Studio 2012/2013 – > Visual Studio Tools ,你会看到它有一个有趣的名字; 该名称应该包括“ Native Tools ”一词; 32位版本的名称中将包含x86 ,而64位版本的名称中将包含x64

    • 从上面的步骤cd到新创build的qt5目录中。

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

      perl ./init-repository --no-webkit

      执行这一步需要花费一些时间,因为它需要下载很多,但是一个体面的连接并不是太糟糕。

    • 然后下载init-repository不能下载的任何剩余可选子模块 – SmartGit只能在此阶段开始运行(请参阅下面的注释)。

    • 一旦Qt的下载完成,下面的命令准备构build环境(它也应该使用[32 | 64] VS本机工具命令提示符执行):

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

      关于这个命令行的注意事项:VS2012编译器可能不需要c++11选项,但可以与VS2013一起使用; 如果您在64位自动构build的ANGLE上遇到错误,则需要-no-warnings-are-errors ; -platform自动设置为win32-msvc2012 ,因此默认情况下使用Qt的32位版本,并且可能不需要在命令行提供平台(如果安装了先前版本的VS,则为EVEN)。 对于VS2013,请使用-platform win32-msvc2013

      执行这个步骤需要几分钟的时间,但并不是那么糟糕。

    • 最后,在系统上实际构buildQt的命令(也可以在VS本地工具命令提示符下运行)很简单:

      nmake

      预计等待几个小时的构build完成。 如果你用-prefix指定了一个输出文件夹(见下面的注释),那么使用nmake install ,否则就是这样。


笔记:

一般注意事项

如果您对以上链接的文档感到困惑,只需使用ANGLE库(默认情况下)而不是OpenGL,这就是为什么您必须安装上述DirectX 11的原因。

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

当运行“init-repository”(从上面的链接中的步骤),它不是从文档中清楚,但你必须通过perl来执行; 即perl ./init-repository --no-webkit 。 然而, configurenmake命令是直接调用的。

传递给configure一个非常有用的选项是-mp ,这会导致Qt在多个内核上并行构build,显着加快了构build时间。

要指定输出文件夹,请将-prefix [outfolder]添加到configure命令。 例如,对于64位Visual Studio 2013(12.0)版本,使用-prefix %CD%\output\x64\vc12将是合适的输出(子)文件夹。


Unicode支持(ICU)

如果您需要Unicode支持(通过ICU ),请特别注意上述链接中提到的指示。 总之,必须在VS 2012中重新构buildICU,因为针对Windows的唯一预构build的ICU二进制文件适用于VS 2010. VS VS 2012中的构build是无痛的 – 只需在ICU解决scheme(.sln)中find<icuroot> \ icu \ source \ allinone,并build立debugging和释放模式(无论是在32位或64位模式,这取决于你build立Qt的模式 – 不要build立在另一位,因为ICU将覆盖输出文件夹二进制文件)。 (Qt构build过程将正确地定位ICU的debugging版本和发行版本。)它应该没有错误地构build。 然后,将<icuroot> \ lib的path作为string条目添加到称为“LIB”的(可能是)新的Windows环境variables中(可以使用Rapid EE;在RapidEE中使LIB成为“可扩展string” 1条目),并添加path到<icuroot> \ include作为一个string入口(可能)新的Windows环境variables名为“INCLUDE”。 (注意:将这些path添加到PATHvariables将不起作用。)Qt构build完成后,可以删除刚才添加的所有这些条目。 此外, 将运行时path添加到环境的PATHvariables,或Qt构build过程(特别是,当uic.exe运行时)的ICU DLL的(<icuroot> \ bin)会给出一个欺骗性和误导性的错误 。 最后,在configure命令行(如下)中,确保添加-icu作为附加的命令行参数。

ICU失败

目前,当ICU被启用时,似乎有一个用VS2012编译器构buildQt5的bug。 具体来说, qtbase\src\corelib\codecs\qtextcodec.cpp行688(Qt5 v5.02)无法返回编解码器名称“US-ASCII”(编解码器为空)的编解码器,导致“lrelease.exe”崩溃试图稍后解引用编解码器(我已经失去了该文件/行号的跟踪,但它是NULL codecvariables的明显取消引用)。 不幸的是,这意味着据我所知, WebKit不能用VS2012编译器(至less是32位版本)构buildQt5 ,因为WebKit需要ICU。

如果任何人都可以用启用了ICU的VS2012编译器构buildQt5,请更新这个Wiki。

ICU澄清

如果你有ICU的话,Qt会自动build立它。 换句话说,标志“ -icu ”隐含在那里。 但是,这会导致上述“lrelease.exe”错误。 所以解决这个问题的办法是在configure命令中添加-no-icu标志


其他子模块

如果除了缺省子模块还需要子模块,则可以完成init-repository命令使用SmartGit(或命令行)。 SmartGit可能是最简单的,因为您不需要将path复制到命令行,但可以直接使用用户界面。

警告:不要下载可选的qlalr模块 ,因为它不会与Qt的整体构build结合在一起,对于Qt用户来说不是必需的,而只是用于内部Qt开发。

警告:必须使用shell命令行,后跟perl .\init-repository --no-webkit (NOT SmartGit)。 这些步骤将正确地只下载默认的Qt子模块。 您不能使用SmartGit从git://gitorious.org/qt/qt5.git克隆和下载Git文件,因为SmartGit当前不能正确处理子模块。 相反,打开一个标准的Windows shell命令提示符(使用任何命令提示符应用程序,不一定是VS工具命令提示符),(假定Git已正确安装在系统上; SmartGit安装可能会或可能不会自动执行;如果它不,去Git for Windows并直接安装)直接从命令行inputgit clone git://gitorious.org/qt/qt5.git ; 也许遵循这个与git checkout stable (我不知道这个分支默认检出); 然后使用命令行perl .\init-repository --no-webkit下拉DEFAULT存储库(WebKit除外,这需要ICU和ICU看起来不能使用VS2012在32位Qt5中构build;请参阅注释)。

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

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

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


一般问题

如果在某个时候出现错误,提示“python”(或类似的东西)没有被识别,只要检查包含python.exe (或相应的.exe )的文件夹是否为pathvariables的一部分。 如果不是,请添加它(如上所述,为了方便,请使用RapidEE),然后尝试您正在做的事情。 如果存在,请确保在将命令添加到path之后重新启动了命令提示符。

还有两个与path相关的问题需要注意(引自与上面链接相关的文档):“ 确保在msysgit提供的perl可执行文件之前的path中find了perl可执行文件,因为后者已经过时 ”。 和“ 你可能无法build立如果sh.exe在你的path(例如,由于git或msys安装)。这样的错误是由qt5-srcqtbasebinqmake.exe:命令未find和类似的指示在这种情况下,请确保sh.exe不在你的path中,如果你的安装已经被configuration,你将不得不重新configuration。

在这个过程中,你可能会遇到一个文件上使用nmake的错误。 如果你这样做,只要进入该目录并强制构build问题文件。 然后再在Qt5上开始nmake进程。


具体问题

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

警告: AVAST! 沙盒用户:Avast沙盒即使在禁用Avast的自动沙箱时也会出现问题,沙箱不会closures,它将静默地沙箱化Qt构build过程中由Qt的rcc程序自动创build的所有资源文件。 任何安装了Avast autosandboxfunction的用户,即使有AUTO-SANDBOXING TURNED OFF,Qt build都会失败。 要克服这个问题的唯一途径就是完全解除安慰! 在构buildQt之前从您的系统。 你可以重新安装Avast! 在Qt构build完成之后。


Qt5的编译可能需要很长时间(小时,即使使用-mpmultithreading选项)。 忍耐。


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

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

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

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

  4. 退出Qt选项对话框。

  5. 创build一个新的Visual Studio项目。 当你看到New Project对话框时,你应该看到Qt5 Projects Template选项。

  6. 一旦你有了新的Qt项目,右键点击它并select“转换到QMake生成的项目”。 构build项目,然后再次右键单击并select“将项目转换为Qt插件项目”。 再次build立,然后运行。 你现在应该有一个有效的Qt项目。


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

本节可能会或可能不会为您工作。 如果遇到问题或有其他更好的解决scheme,请留下评论或编辑适当的步骤。

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

  2. 进入Global PropertyGroup,添加或更改<Keyword>到Qt4VSv1.0。

  3. 重新加载项目,然后右键单击并select“将项目转换为Qt插件项目”

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

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


    笔记:

    如果在任何时候你包含windows.h ,你需要在#define NOMINMAX 之前先 #define NOMINMAX 以避免与qdatetime.h冲突。

    完成上述步骤后,您可以通过selectQt5>Create basic .pro file来使您的项目可以被Qt Creator使用。


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

我成功地在Windows 7上基于Dan Nissenbaum的优秀文章(Thanks,Dan!)成功地将Qt 5.0.2与Visual Studio 2012集成在了一起,并且也在这个qt-project链接上 。 由于我以稍微不同的方式完成了一些步骤,因此我认为在这里发布它是有效的:

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

0 – 卸载Avast(如果你有这个安装),以避免造成错误。 由于Avast bug,停用它将不起作用;

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 – 为qt5select你想要的任何目录,关于没有空间允许select的path。 我决定使用path“C:\ qt5”;

7 – 在正常的Windows 7命令提示符(在我的情况下,提示“C:\ qt5>”)键入:

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

8 – 检出稳定版本:

 cd qt5 git checkout stable 

9 – 您可能会收到确认此版本已稳定的消息。 closures命令提示符;

10 – 打开Visual Studio的开发人员控制台(所有程序> Visual Studio 2012> Visual Studio工具> VS2012开发人员命令提示符) ,并将当前目录更改为您select的目录(在我的示例中为“C:\ qt5”)。

11 – 下载Qt submodules,忽略webkit(常见的编译错误源码):

 perl .\init-repository --no-webkit 

12 – 现在input这个巨大的命令来正确configuration你的构build:

 configure -developer-build -opensource -nomake examples -nomake tests -nomake demos -debug-and-release -c++11 -mp -nomake webkit -confirm-license 

13 – 接下来,确保模块qlalr 不会被build立。 要做到这一点,打开Windows资源pipe理器,并导航到您select的Qt目录(在我的例子中的“ C:\ qt5 ”),并检查文件夹qlalr是否存在。 如果是这样,删除它;

14 – 构build时间…可能的构build错误将来自辅助模块(如webkit),这不会影响主要的Qtfunction(webkit本身不应该是一个问题,因为我们之前已经设置configuration不build立它)。 然后,我们可以忽略它们,并使构build在独立的模块上运行:

 nmake /I /K 

15 – 要完成整合,请按照上面Dan Nissenbaum的post(“步骤3:将Qt5与Visual Studio 2012集成”)的步骤3进行。

只需要提一下,在http://qt-project.org/downloads上有一个针对Visual Studio 2012的预编译版本Qt 5.2。 所以如果你对从源代码构buildQt 5没有特别的兴趣,你也可以使用预构build的二进制文件。

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

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

在上面的post中说过了第一步和第二步。 我试图做第3步,但SmartGit拉了一堆额外的项目,不会用Qt5编译。 我可以通过从不同的分支克隆(例如https://qt.gitorious.org/qt/qt3d/ )来解决大部分的问题,但是对于每一个额外的模块来说这太繁琐了,所以我决定不编译任何一位。

在ICU支持与VS2012编译器Qt5的32位版本导致Qt5构build失败; 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源代码的path。

在Visual Studio 2012中打开%ICU%\ source \ allinone \ allinone.sln文件并编译。 将%ICU%\ bin添加到您的path中

 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的程序的简短经验,并链接到这个构build导致我相信一切都很好。

–Update–

只是要完成。 根据什么(设置PATH = …;%PATH:)= ^)%)意味着在Windows shell脚本中,以及如何克服Qt5 nmake构build的上下文中的这条线的故障? (指向http://qt-project.org/forums/viewthread/20605 )大多数的Makefile问题应该可以通过使用jsom而不是nmake解决(虽然我仍然怀疑win-flex.exe)

使用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