如何在Windows或Linux下编译Qt 5,32或64位,静态或动态VS2010,VS2012,VS2013或VS2015 Express或g ++

The*_*ist 51 c++ qt compilation visual-studio-2010 visual-studio-2012

只是一个帖子来帮助那些尝试这样做的人,因为我没有博客.

这也适用于linux.随意编辑并改进它.

The*_*ist 90

注意:我还写了另一篇文章,从GIT源代码编写,在Windows 上使用自动脚本编写.您可以为Linux修改它,因为这篇文章中显示了差异.

本文不断更新.如果这对你有帮助,请给它一个"竖起大拇指",这样我才能知道它在帮助人们而不是无用.

如果您有任何意见或发现错别字,请告诉我,以便我可以解决它们.

首先,是否要编译32位或64位版本并不重要.唯一的区别是您必须从Visual Studio中选择的命令提示符快捷方式,它将初始化不同的环境变量.


让我们从这开始:

  1. 下载并安装Perl:下载链接

  2. 下载并安装Python:下载链接

  3. 下载并安装Windows SDK(可能没有必要,但推荐)我使用Windows 8,所以这是我使用的版本:下载链接 ,否则找到适合您的Windows的版本.

  4. 下载并安装DirectX SDK(如果您想使用OpenGL编译,可能是必需的) 下载链接

  5. 下载并解压jom到某个文件夹(Linux不需要)(jom是一个用于并行编译VS的工具,有一种方法可以用nmake做这个,但我不熟悉它)下载链接

  6. 下载Qt Opensource,并提取它,说C:\Qt\Qt5.6,现在qtbase可以找到该文件夹C:\Qt\Qt5.6\qtbase.

  7. 仅适用于Windows:您真的想要完全静态吗?

    通常,即使您选择编译为静态,编译器本身仍然不会静态合并其库.如果您希望编译的源相对于编译器(Visual Studio)是完全静态的,则必须在Qt的QMAKE文件中进行此调整.

    转到文件(从Qt源目录开始),对于高于2012的版本,只需在任何地方使用正确的版本(例如win32-msvc2015):

    • 一个.对于VS2012: qtbase\mkspecs\win32-msvc2012\qmake.conf

    • 对于VS2010: qtbase\mkspecs\win32-msvc2010\qmake.conf

    • C.对于Qt 5.5.0及更高版本(使用任何VS版本):qtbase\mkspecs\common\msvc-desktop.conf

    并编辑以下行

     QMAKE_CFLAGS_RELEASE    = -O2 -MD
     QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO += -O2 -MD -Zi
     QMAKE_CFLAGS_DEBUG      = -Zi -MDd
    
    Run Code Online (Sandbox Code Playgroud)

     QMAKE_CFLAGS_RELEASE    = -O2 -MT
     QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO += -O2 -MT -Zi
     QMAKE_CFLAGS_DEBUG      = -Zi -MTd
    
    Run Code Online (Sandbox Code Playgroud)

注意:Qt 5.6+有一个配置参数-static-runtime,可以为您执行此操作.对于新版本的Qt,您可能不需要再手动执行此操作.

  1. 在Linux或Windows中启动终端,启动Visual Studio的终端(设置了正确的环境变量,或者使用vcvarsall.bat).要启动命令提示符并让它自动执行此操作,请转到"开始","所有程序":

    对于8之前的Windows版本:找到Microsoft Visual Studio 201x文件夹,然后启动命令提示符(x86表示32位或x64表示64位).

    对于Windows 8:转到" 开始",键入"cmd",将显示可用于命令提示符的所有版本.选择适当的Visual Studio版本(x86表示32位,x64表示64位).

以下是它的外观截图.如果存在,总是倾向于选择"原生".

在此输入图像描述

9.

注意:QMAKESPEC对于Qt版本5.8+,设置环境变量被认为是错误的.不要为新版本执行此操作.

用于动态链接(需要8 GB)

configure -debug-and-release -opensource -platform win32-msvc2012 -opengl desktop
Run Code Online (Sandbox Code Playgroud)

没有示例的动态链接(需要2 GB)

configure -debug-and-release -opensource -platform win32-msvc2012 -opengl desktop -nomake examples -nomake tests

 Now the last command depends on what you want to compile. Just type configure -help and see what the available command-line parameters are.
Run Code Online (Sandbox Code Playgroud)

对于静态链接(需要70 GB,是的,这很疯狂,不做示例和演示更合理).

configure -debug-and-release -opensource -platform win32-msvc2012 -opengl desktop -static
Run Code Online (Sandbox Code Playgroud)

对于没有示例的静态链接(需要4 GB,更有意义).

configure -debug-and-release -opensource -platform win32-msvc2012 -opengl desktop -static -nomake examples -nomake tests
Run Code Online (Sandbox Code Playgroud)

现在这将需要一两分钟,然后使用如下的jom(假设它是在C:\ Qt\jom中提取的):

C:\Qt\jom\jom.exe -j 50
Run Code Online (Sandbox Code Playgroud)

50表示您要使用的核心数.我使用50,因为我有8个线程,只使用8个不会完全占用所有核心,所以越多越好,但不要太贪心,因为它可能会使你的系统没有响应.

注意:QMAKESPEC对于Qt版本5.8+,设置环境变量被认为是错误的.不要为新版本执行此操作.用于动态链接(需要8 GB)

configure -debug-and-release -opensource -platform win32-msvc2010 -opengl desktop
Run Code Online (Sandbox Code Playgroud)

没有示例的动态链接(需要2 GB)

configure -debug-and-release -opensource -platform win32-msvc2010 -opengl desktop -nomake examples -nomake tests
Run Code Online (Sandbox Code Playgroud)

最后一个命令取决于您要编译的内容.只需键入configure -help并查看可用的命令行参数.对于静态链接(需要70 GB,是的,这很疯狂,不做示例和演示更合理).

configure -debug-and-release -opensource -platform win32-msvc2010 -opengl desktop -static
Run Code Online (Sandbox Code Playgroud)

对于没有示例的静态链接(需要4 GB,更有意义).

configure -debug-and-release -opensource -platform win32-msvc2010 -opengl desktop -static -nomake examples -nomake tests
Run Code Online (Sandbox Code Playgroud)

现在这将需要一两分钟,然后使用如下的jom(假设它是在C:\ Qt\jom中提取的):

C:\Qt\jom\jom.exe -j 50
Run Code Online (Sandbox Code Playgroud)

50表示您要使用的核心数.我使用50,因为我有8个线程,只使用8个不会完全占用所有核心,所以越多越好,但不要太贪心,因为它可能会使你的系统没有响应.

  • 对于linux:

Linux与Windows有一个小的区别.在linux中建议在编译后安装.老实说,这是它没有问题的唯一方式.

执行以下Linux命令.不要忘记用Qt源的正确路径替换路径

    export QMAKESPEC=linux-g++
    export QTDIR=/home/username/Qt5.7/qtbase
    export PATH=/home/username/Qt5.7/qtbase/bin:$PATH
Run Code Online (Sandbox Code Playgroud)

注意:QMAKESPEC对于Qt版本5.8+,设置环境变量被认为是错误的.不要为新版本执行此操作.

假设您要将已编译的源安装到目录中/home/username/Qt5.7-install.在这种情况下,请将以下内容添加到以下任何配置命令中:

-prefix /home/username/Qt5.7-install
Run Code Online (Sandbox Code Playgroud)

警告:请勿安装到同一源目录.那是完全错的!

如果-prefix未设置,将选择默认路径,这是/usr/local/我猜的.我不喜欢用root安装任何东西.我总是喜欢在我的用户文件夹中安装,因此可逆性和升级不是问题.

以下是不同的可能configure命令,具体取决于您要执行的操作.

用于动态链接(需要8 GB)

./configure -debug-and-release -opensource -platform linux-g++ -opengl desktop
Run Code Online (Sandbox Code Playgroud)

没有示例的动态链接(需要2 GB)

./configure -debug-and-release -opensource -platform linux-g++ -opengl desktop -nomake examples -nomake tests
Run Code Online (Sandbox Code Playgroud)

现在最后一个命令取决于你想要编译的内容.只需键入 ./configure -help并查看可用的命令行参数.

对于静态链接(需要70 GB,是的,它很疯狂,不做示例和测试更合理).

./configure -debug-and-release -opensource -platform linux-g++ -opengl desktop -static
Run Code Online (Sandbox Code Playgroud)

对于没有示例的静态链接(需要4 GB,更有意义).

./configure -debug-and-release -opensource -platform linux-g++ -opengl desktop -static -nomake examples -nomake tests
Run Code Online (Sandbox Code Playgroud)

完成后,运行make命令

make -j 50
Run Code Online (Sandbox Code Playgroud)

50表示您要使用的核心数.我使用50,因为我有8个线程,只使用8个不会完全占用所有核心,所以越多越好,但不要太贪心,因为它可能会使你的系统没有响应.

  1. 等待2个多小时,直到编译完成.

  2. 清理!你可以使用这个命令为Windows节省大量空间:C:\Qt\jom\jom.exe clean 这个命令用于linux:make clean

您可以将已编译文件夹的大小从8 GB减少到2.5 GB(用于动态链接),从70 GB减少到35 GB(用于静态链接).


为了在Qt Creator中使用这个编译版本:

  1. 启动Qt Creator
  2. 转到"工具","选项"
  3. 从左侧列表中选择"构建并运行".
  4. 转到"Qt版本"选项卡
  5. 单击"添加"并从qtbase中bin所在的文件夹中选择qmake,所以从上面:

    C:\ Qt的\ Qt5.7\qtbase\BIN\qmake.exe

(或者Linux用于选择安装已编译Qt源的路径,这与/home/username/Qt5.7-install/qtbase/bin/qmake本教程中的内容相同)

  1. 点击"申请"
  2. 转到"套件"选项卡
  3. 点击"添加"
  4. 给它一个名字,选择合适的编译器(FOR VISUAL STUDIO EXPRESS不要选择amd64 for 64-BIT,它不会工作,选择x86_amd64 INSTEAD)
  5. 单击确定.

现在只需打开一个项目,你会发现它要求你选择你添加的工具包.

请享用 :)