c++ - 如何在 Windows 或 Linux、32 或 64 位、静态或动态的 Visual Studio 或 g++ 下编译 Qt 5

标签 c++ visual-studio-2010 qt compilation visual-studio-2012

只是一个帖子来帮助那些试图做到这一点的人,因为我没有博客。

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

最佳答案

注意:还有另一篇我写给 compile from GIT source here with an automated script 在 Windows 上的文章。您可以针对 Linux 修改它,因为本文中显示了差异。

本文持续更新中。如果这对您有帮助,请给它“竖起大拇指”,以便我知道它是在帮助人们而不是无用。

如果您有任何意见或发现错别字,请告诉我,以便我可以更正。

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

让我们从这个开始:

  • 下载安装Perl:Download link
  • 下载安装Python:Download link
  • 下载安装 Windows SDK (可能不需要,但推荐)
    我使用 Windows 8,所以这是我使用的版本:Download link
    , 否则为您的 Windows 找到合适的版本。
  • 下载并安装 DirectX SDK (如果你想用 OpenGL 编译,可能需要)
    Download link
  • 下载并解压 jom 到某个文件夹(linux 不需要)(jom 是一个用 VS 并行编译东西的工具,有一种方法可以用我熟悉的 nmake12123213212321321321321232132132132132132312321232123212321232123212321321321321321321213之间
  • 下载 Qt Opensource 解压 C:\Qt\Qt5.6 可以找到1423181423181423181431814318
  • 仅适用于 Windows: 你真的想要它完全静态吗?

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

    转到文件(从你的Qt源目录开始), 高于2012的版本,只需在任何地方使用正确的版本(例如win32-msvc2015) :
  • 对于 VS2012: qtbase\mkspecs\win32-msvc2012\qmake.conf
  • b. 对于 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
    


     QMAKE_CFLAGS_RELEASE    = -O2 -MT
     QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO += -O2 -MT -Zi
     QMAKE_CFLAGS_DEBUG      = -Zi -MTd
    

    注意:Qt 5.6+ 有一个配置参数 qtbase 可以为你做这件事。对于新版本的 Qt,您可能不再需要手动执行此操作。
  • 在 linux 或 Windows 中启动终端,启动 Visual Studio 的终端(设置了正确的环境变量,或者使用 Download link )。要启动命令提示符并让它自动为您执行此操作,请转到“开始”、“所有程序”:

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

    对于 Windows 8:转到“开始”,键入“cmd”,然后将显示可用于命令提示符的所有版本。选择合适的 Visual Studio 版本(x86 用于 32 位或 x64 用于 64 位)。

  • 以下是它的外观的屏幕截图。如果存在,总是倾向于选择“ native ”。

    vcvarsall.bat

    9.
  • VS2012 VS2012 执行以下命令
     set QMAKESPEC=win32-msvc2012
     set QTDIR=C:\Qt\Qt5.7\qtbase
     set PATH=C:\Qt\Qt5.7\qtbase\bin;%PATH%
    

  • 注意:对于 Qt 5.8+ 版本,设置 C:\Qt\Qt5.6\qtbase 环境变量被认为是错误的。不要为新版本这样做。

    用于动态链接(需要 8 GB)
    configure -debug-and-release -opensource -platform win32-msvc2012 -opengl desktop
    

    对于没有示例的动态链接(需要 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.
    

    对于静态链接(需要 70 GB,是的,这很疯狂,不制作示例和演示更合理)。
    configure -debug-and-release -opensource -platform win32-msvc2012 -opengl desktop -static
    

    对于没有示例的静态链接(需要 4 GB,更有意义)。
    configure -debug-and-release -opensource -platform win32-msvc2012 -opengl desktop -static -nomake examples -nomake tests
    

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

    50 表示您要使用的核心数。我使用 50 是因为我有 8 个线程并且只使用 8 个不会完全占用所有内核,所以更多更好,但不要太贪婪,因为它可能会使您的系统没有响应。
  • VS2010 VS2010 执行以下命令
    set QMAKESPEC=win32-msvc2010
    set QTDIR=C:\Qt\Qt5.7\qtbase
    set PATH=C:\Qt\Qt5.7\qtbase\bin;%PATH%
    

  • 注意:对于 Qt 5.8+ 版本,设置 -static-runtime 环境变量被认为是错误的。不要为新版本这样做。
    用于动态链接(需要 8 GB)
    configure -debug-and-release -opensource -platform win32-msvc2010 -opengl desktop
    

    对于没有示例的动态链接(需要 2 GB)
    configure -debug-and-release -opensource -platform win32-msvc2010 -opengl desktop -nomake examples -nomake tests
    

    最后一个命令取决于您要编译的内容。只需键入 configure -help 并查看可用的命令行参数是什么。
    对于静态链接(需要 70 GB,是的,这很疯狂,不制作示例和演示更合理)。
    configure -debug-and-release -opensource -platform win32-msvc2010 -opengl desktop -static
    

    对于没有示例的静态链接(需要 4 GB,更有意义)。
    configure -debug-and-release -opensource -platform win32-msvc2010 -opengl desktop -static -nomake examples -nomake tests
    

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

    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
    

    注意:对于 Qt 5.8+ 版本,设置 QMAKESPEC 环境变量被认为是错误的。不要为新版本这样做。

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

    警告 :不要安装到相同的源目录。那是完全错误的!

    如果未设置 QMAKESPEC,则将选择默认路径,我猜是 /home/username/Qt5.7-install。我不喜欢使用 root 安装任何东西。我总是喜欢在我的用户文件夹中安装,这样可逆性和升级就不是问题。

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

    用于动态链接(需要 8 GB)
    ./configure -debug-and-release -opensource -platform linux-g++ -opengl desktop
    

    对于没有示例的动态链接(需要 2 GB)
    ./configure -debug-and-release -opensource -platform linux-g++ -opengl desktop -nomake examples -nomake tests
    

    现在最后一个命令取决于您要编译的内容。只需输入 /usr/local/ 并查看可用的命令行参数是什么。

    对于静态链接(需要 70 GB,是的,这很疯狂,不制作示例和测试更合理)。
    ./configure -debug-and-release -opensource -platform linux-g++ -opengl desktop -static
    

    对于没有示例的静态链接(需要 4 GB,更有意义)。
    ./configure -debug-and-release -opensource -platform linux-g++ -opengl desktop -static -nomake examples -nomake tests
    

    制作完成后,运行make命令
    make -j 50
    

    50 表示您要使用的核心数。我使用 50 是因为我有 8 个线程并且只使用 8 个不会完全占用所有内核,所以更多更好,但不要太贪婪,因为它可能会使您的系统没有响应。
  • 等待2个多小时编译完成。
  • 清理!您可以使用此命令为 Windows 节省大量空间:configure 而此命令适用于 linux:./configure -help

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

    为了在 Qt Creator 中使用这个编译版本:
  • 启动Qt Creator
  • 转到工具,选项
  • 从左侧列表中选择 Build and Run。
  • 转到“Qt 版本”选项卡
  • 单击“添加”并从 bin 所在的文件夹中选择 qmake
    qtbase 是,所以从上面:

    C:\Qt\Qt5.7\qtbase\bin\qmake.exe

  • (或者对于Linux,选择你安装编译好的Qt源的路径,相当于本教程中的C:\Qt\jom\jom.exe clean)
  • 点击“应用”
  • 转到“套件”选项卡
  • 点击“添加”
  • 给它一个名字,选择合适的编译器(FOR VISUAL STUDIO
    EXPRESS DO NOT SELECT amd64 FOR 64-BIT ,它不起作用,选择
    x86_amd64 取而代之)
  • 单击确定。

  • 现在只需打开一个项目,您就会发现它要求您选择您添加的套件。

    享受 :)

    关于c++ - 如何在 Windows 或 Linux、32 或 64 位、静态或动态的 Visual Studio 或 g++ 下编译 Qt 5,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14932315/

    相关文章:

    c++ - 使用模板化类型的模板中的函数原型(prototype)

    c++ - 如何使用模板简化结构?

    c++ - 'unbounded_buffer' 中的消息数

    c++ - 模板化的 Barton 和 Nackman 技巧问题

    c++ - 结构中的内存布局差异

    c++ - VS 2010,移动构造函数仅在 move() 之后到达并且比复制构造函数慢?

    visual-studio-2010 - 如何在 Visual Studio 2010 中禁用对用户未处理的异常的中断?

    java - 使用 JNI 将字符串从 Java 传递到 C++

    c++ - QtCharts setRange问​​题

    c++ - 即使正在引用变量,也会收到警告 C4189 "local variable is initialized but not referenced"