QT VS2017 32位和64位动态与静态编译及他人使用注意

一、下载源码包

首先,我们需要从Qt官网(地址:http://download.qt.io/official_releases/qt/5.9/5.9.7/single/ )下载对应的Qt源码。在这里,我以在Windows下编译Qt程序为例。下载后是一个压缩文件,将它解压到一个空间较大的磁盘下面。一会静态编译需要占用大量磁盘空间。(谨慎起见,请至少保证该磁盘下有10G左右空间。)
QT VS2017 32位和64位动态与静态编译及他人使用注意_第1张图片

二、编译环境

以下是编译时需要的工具,在编译之前,请务必安装!
安装都比较简单。这里直接给出官网下载的链接。最后记得添加到环境变量(安装时把‘’添加到PATH环境“选项勾起就可以了,或者在安装后手动添加也可以)。我下载的都是最新版本。ruby、perl、python安装的时候会添自己添加到环境变量,python安装的时候需要自己选择是否增加到环境变量,默认是没勾选的。JOM需要自己把安装路径增加到环境变量。完整的环境变量配置见下图。
Ruby version 1.9.3 or later
Perl version 5.12 or later
Python version 2.7.5 or later
JOM
QT VS2017 32位和64位动态与静态编译及他人使用注意_第2张图片
软件打包下载:https://download.csdn.net/download/qing666888/10870658

建议安装jom,来替换nmake进行编译,可以充分利用CPU多核的能力,否则估计你会中途吐血的。jom是nmake的多线程版,nmake不支持多线程,单线程编译速度太慢了。

  1. 在开始菜单中,找到“适用于 VS 2017 的 x64 本机工具命令提示“ 或者 “x64 Native Tools Command Prompt for VS 2017”。根据自己要求找到对应的32位或64位版本。
    QT VS2017 32位和64位动态与静态编译及他人使用注意_第3张图片
  2. 将当前命令行目录切换到qt源码解压后的目录下。

三、编译静态库

  1. 在编译之前记得先将所有的杀毒软件关掉(避免误杀)。

  2. 然后进入解压后的Qt源码文件夹下的qtbase/mkspecs下,找到win32-msvc文件夹。
    QT VS2017 32位和64位动态与静态编译及他人使用注意_第4张图片

  3. 找到相应的文件后,如果需要编译静态库,则修改其内容。在这里也就是msvc-desktop.conf这个文件。
    路径:qtbase\mkspecs\common\msvc-desktop.conf

  4. 大概在38行左右。将MD改成MT,MDd改成MTd,对应关系如下:
    静态编译: debug状态下 – MTd; release状态下 – MT
    动态编译: debug状态下 – MDd;release状态下 – MD

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

变为:

QMAKE_CFLAGS_RELEASE = $$QMAKE_CFLAGS_OPTIMIZE -MT 
QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO += $$QMAKE_CFLAGS_OPTIMIZE -Zi -MT
QMAKE_CFLAGS_DEBUG = -Zi -MTd
  1. 然后执行下面的配置,最后nmake 和nmake install,如果安装了jom,则执行jom和jom install。
configure -confirm-license -opensource -platform win32-msvc -debug-and-release -static -static-runtime \
 -force-debug-info -opengl dynamic -prefix "../msvc2017_static" -qt-sqlite -qt-pcre -qt-zlib -qt-libpng \
 -qt-libjpeg -opengl desktop -qt-freetype -nomake tests -no-compile-examples -nomake examples

四、编译动态库

  1. 编译debug版
configure -confirm-license -opensource -platform win32-msvc -debug -shared -force-debug-info \
 -opengl dynamic -prefix "../msvc2017_debug" -qt-sqlite -qt-pcre -qt-zlib -qt-libpng -qt-libjpeg \
 -opengl desktop -qt-freetype -nomake tests -no-compile-examples -nomake examples

直接nmake然后nmake install 就行了,如果安装了jom,则执行jom和jom install。

  1. 编译release版
configure -confirm-license -opensource -platform win32-msvc -release -shared -force-debug-info \
 -opengl dynamic -prefix "../msvc2017_release" -qt-sqlite -qt-pcre -qt-zlib -qt-libpng -qt-libjpeg \
 -opengl desktop -qt-freetype -nomake tests -no-compile-examples -nomake examples

再nmake然后nmake install 就行了,如果安装了jom,则执行jom和jom install。

  1. 编译debug+release版(推荐),Qt安装包里有VS2017 64位版本,我们只需编译32位的版本。
configure -confirm-license -opensource -platform win32-msvc -debug-and-release -shared -force-debug-info \
-opengl dynamic -prefix "../msvc2017_32" -qt-sqlite -qt-pcre -qt-zlib -qt-libpng -qt-libjpeg  \
-opengl desktop -qt-freetype -nomake tests -no-compile-examples -nomake examples

再nmake然后nmake install 就行了,如果安装了jom,则执行jom和jom install。

注:如果上述configure命令执行报错,把后面的分行符去掉,三行合成一行执行。

五、完成编译注意事项

  如果没有意外,那么我们就会在之前设定好的路径下看到编译好的文件。至此,整个Qt源码编译过程也就结束了。最后把生成文件拷贝到如下目录,重新配置一下VS或者QtCreator即可。
QT VS2017 32位和64位动态与静态编译及他人使用注意_第5张图片

  如果移动了QT SDK的安装目录,即编译后的SDK发送给别人使用,或者修改了SDK的目录名称等等,则需注意会各种报错,这是因为qt 将路径硬编码到了qmake.exe中, 但是会优先寻找qt.conf ,如果有就使用qt.conf中配置的路径,没有则使用默认路径,在新编译的Qt版本bin目录下缺少配置文件qt.conf,我们把msvc2017_64\bin\qt.conf配置文件,拷贝一份到msvc2017_32\bin目录下目录下即可:也可以自己手动在qmake目录下新建一个qt.conf文件,注意,编码一定要ANSI格式,不能用UTF-8。路径分隔符用"/"或“\\”)。

[Paths]
Prefix=..

QT VS2017 32位和64位动态与静态编译及他人使用注意_第6张图片
静态编译如果提示:: error: LNK1181: 无法打开输入文件“C:\Program Files (x86)\Windows Kits\10\lib\10.0.18362.0\um\x86\winspool.lib”,则需要安装对应版本的windows SDK。因为别人静态编译依赖的此SDK。安装SDK到报错所在目录。同时要看清楚别人分享的编译版本是Debug还是Release,还是两个版本都包含的,要不然别人只提供的编译的Release版本,你往死里编译Debug版本不报错才怪

他人编译的各种版本(所有版本:只有Release!!!!!!!!)
http://fsu0413.github.io/QtCompile

参考文章:
https://blog.csdn.net/qq_16395987/article/details/84564728
https://blog.csdn.net/wyansai/article/details/80600293

QWebEngine编译参考:
(需要很长时间和硬盘内存空间,请确保硬盘空间在50G以上。编译时间较长):
https://blog.csdn.net/u013125105/article/details/83379487

你可能感兴趣的:(QT)