Qt 5.10.1 & vs2017 静态编译

凡式原创,转载请注明

  • 2018-03-05

准备:

1、源代码&编译器

  • qt-everywhere-src-5.10.1.tar.xz 5.10.1
  • Visual Studio Enterprise 2017 15.5.6

2、编译环境(add to path)

  • Ruby version 1.9.3 or later
  • Perl version 5.12 or later
  • Python version 2.7 or later

编译:

1、mkspecs

将Qt源代码路径下面 qtbase\mkspecs\common\msvc-desktop.conf 的以下几行:

QMAKE_CFLAGS_RELEASE = $$QMAKE_CFLAGS_OPTIMIZE -MD 
QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO += $$QMAKE_CFLAGS_OPTIMIZE -MD -Zi 
QMAKE_CFLAGS_DEBUG = -Zi -MDd

修改为:

QMAKE_CFLAGS_RELEASE = $$QMAKE_CFLAGS_OPTIMIZE -MT 
QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO += $$QMAKE_CFLAGS_OPTIMIZE -MT -Zi 
QMAKE_CFLAGS_DEBUG = -Zi -MTd

2、configure

开始 -> Visual Studio 2017 -> x86 Native Tools Command Prompt for VS 2017 或者 x64 Native Tools Command Prompt for VS 2017

cd /d D:\src\qt-everywhere-src-5.10.1
mkdir build
cd /d build
D:\src\qt-everywhere-src-5.10.1\build > D:\src\qt-everywhere-src-5.10.1\configure.bat -h
D:\src\qt-everywhere-src-5.10.1\build > configure.bat  -confirm-license -opensource -release -static -force-asserts -platform win32-msvc -prefix C:\Qt\Qt5.10.1-vs2017-static -static-runtime -mp -silent -opengl desktop -qt-sqlite -qt-pcre -qt-zlib -qt-freetype -qt-harfbuzz -qt-libpng -qt-libjpeg -nomake examples -nomake tests
具体配置详情如下:
-confirm-license -opensource
-release 版本
-static 静态
-force-asserts
-platform win32-msvc 版本
-static-runtime 
-mp 多线程编译
-silent 不显示编译时多余的大量信息
-opengl desktop 选择desktop而不是dynamic,避免qcustomplot无法使用opengl
-qt-sqlite 三个选项[system/qt/no]选择源码自带
-qt-pcre 三个选项[system/qt/no]选择源码自带
-qt-zlib 三个选项[system/qt/no]选择源码自带
-qt-freetype 三个选项[system/qt/no]选择源码自带
-qt-harfbuzz 三个选项[system/qt/no]选择源码自带
-qt-libpng 三个选项[system/qt/no]选择源码自带
-qt-libjpeg 三个选项[system/qt/no]选择源码自带
-nomake examples 不编译例子
-nomake tests 不编译测试

3、nmake & nmake install

nmake
nmake install

3、jom

( 优化并行编译的工具替代nmake;nmake在configure时也可以指定-mp参数进行多线程编译 )

jom -j8
jom install

4、qt.conf

[问题]:添加静态编译的Qt版本,工具->选项->构建和运行->Qt Versions->添加->,此时出现错误
[错误]:qt没有被正确的安装,请运行make install
[解决办法]:在qmake.exe同一文件夹下,创建一个qt.conf文件(必须为ANSI格式)

[paths]  
Prefix = ..

你可能感兴趣的:(Qt 5.10.1 & vs2017 静态编译)