zoukankan      html  css  js  c++  java
  • 【全网首发】使用vs2017+qt5.12.4编译64位debug和release的qgis3.4.9

    一、摘要:

    搜索网络没有发现一篇文章完整的介绍如何编译qgis3.4.x的debug版本,官方的指导也长时间不再更新。

    所以前前后后花了4天搞定qgis的debug编译,并成功运行,废话不多说,直接上步骤。

    二、需要准备的东西

    1、cmake,一般下载最新的release版本即可,本文使用3.14.5

    2、osgeo4w,qgis的依赖安装工具,本文使用64位

    3、vs2017,本文使用最新版本15.9.14

    4、QGIS的源码包,本文使用最新ltr版本3.4.9

    5、cygwin,用来下载依赖工具,默认安装最新版本即可

    6、windows下的openssl,默认下载最新版本即可,本文使用1.1.1.c

    7、qwt,本文使用最新的6.1.4

    8、qtkeychain,本文使用最新的0.9.1

    9、qca,本文使用最新的2.2.1

    10、QScintilla,本文使用最新的2.11.2

    11、ninja,本文使用最新的1.9.0

    12、QT,本文使用最新的ltr版本5.12.4,我从国内清华大学的镜像站下载。

    13、Everything,用于后面编译完成后快速找文件用。

    三、步骤

    1、安装Win64OpenSSL-1_1_1c.exe、cmake、qt,根据需要选择组件。

    2、使用cygwin安装flex、bison。

    3、使用osgeo4w安装(选择Advanced install)qgis编译需要的依赖:Proj、GEOS、GDAL、Expat、libspatialindex、SpatiaLite、LibZip、Sqlite3、python3、GSL。

    4、解压ninja的压缩包,并把ninja.exe复制到osgeo4w的安装路径的bin目录中(默认是C:OSGeo4W64in),路径可在第3步中修改,建议别改,后续的bat脚本会用到这个路径。

    5、qwt的编译,看源码目录中的doc/html/qwtinstall.html即可。我的步骤如下:

    1)解压源码
    (2)启动qt命令行模式(开始菜单有),然后调用vcvarsall.bat x64设置vs环境变量,vcvarsall.bat需要完整路径
    (3)如果有需要就修改qwtbuild.pri和qwtconfig.pri,否则略过,我没修改。
    (4)命令行下进入qwt源码目录,执行qmake qwt.pro
    (5)执行nmake
    (6)执行nmake install,程序被安装到c盘根目录(我的是C:Qwt-6.1.4

    6、qtkeychain的编译

    1)解压源码
    (2)启动qt命令行模式(开始菜单有),然后调用vcvarsall.bat x64设置vs环境变量
    (3)执行cmake-gui
    (4)在cmake进行Configure、Generate、Open Project,记得修改CMAKE_INSTALL_PREFIX为自定义的安装目录。
    (5)打开工程后执行批生成ALL_BUILD,INSTALL

    7、qca的编译

    1)解压源码
    (2)启动qt命令行模式(开始菜单有)
    (3)执行cmake-gui
    (4)在cmake进行Configure
    (5)勾选DEVELOPER_MODE、去除BUILD_TESTS的勾选,在CMAKE_CXX_FLAGS加入 /MP;
    (6)Generate、Open Project
    (7)打开工程后执行批生成ALL_BUILD
    (8)在自定义的安装目录中新建qca_2.2.1目录,然后在编译目录中拷贝bin目录,lib目录到qca_2.2.1目录,在源码目录拷贝include到qca_2.2.1目录,用编译目录下的qca_version.h替换include目录中的qca_version.in.h

    8、QScintilla的编译

    1)解压源码
    (2)进入源码下的qt4qt5目录
    (3)执行qmake、nmake all、nmake install
    (4)拷贝debug库到安装目录,默认是在qt的安装目录中。

    9、配置msvc-env.bat

    $QGIS_PATHms-windowosgeo4wmsvc-env.bat中的
    set VS140COMNTOOLS=%PF86%Microsoft Visual Studio 14.0Common7Tools
    call "%PF86%Microsoft Visual Studio 14.0VCvcvarsall.bat" %VCARCH%
    path %path%;%PF86%Microsoft Visual Studio 14.0VCin
    为
    set VS150COMNTOOLS=%PF86%Microsoft Visual Studio2017EnterpriseCommon7Tools
    call "%PF86%Microsoft Visual Studio2017EnterpriseVCAuxiliaryBuildvcvarsall.bat" %VCARCH%
    path %path%;%PF86%Microsoft Visual Studio2017EnterpriseVCToolsMSVC14.16.27023inHostx64x64
    
    注释GRASS7的内容,因为用不上,如果有需要请自行在osgeo4w中安装:
    set GRASS7=
    if exist %OSGEO4W_ROOT%ingrass74.bat set GRASS7=%OSGEO4W_ROOT%ingrass74.bat
    if exist %OSGEO4W_ROOT%ingrass76.bat set GRASS7=%OSGEO4W_ROOT%ingrass76.bat
    if "%GRASS7%"=="" (echo GRASS7 not found & goto error)
    for /f "usebackq tokens=1" %%a in (`%GRASS7% --config path`) do set GRASS_PREFIX=%%a

     10、配置qt,在C:OSGeo4W64in下添加qt.conf,qt5.conf,qt5_env.bat。qt5_env.bat文件内容根据实际情况进行修改,3个文件保存为utf-8格式。

    qt.conf和qt5.conf内容:
    
    [Paths]
    Prefix=$(O4W_QT_PREFIX)
    Binaries=$(O4W_QT_BINARIES)
    Plugins=$(O4W_QT_PLUGINS)
    Libraries=$(O4W_QT_LIBRARIES)
    Translations=$(O4W_QT_TRANSLATIONS)
    Headers=$(O4W_QT_HEADERS)
    Documentation=$(O4W_QT_DOC)
    qt5_env.bat内容:
    
    @echo off
    path C:/Qt/Qt5.12.4/5.12.4/msvc2017_64/bin;%PATH%
    set QT_PLUGIN_PATH=C:/Qt/Qt5.12.4/5.12.4/msvc2017_64/plugins
    set O4W_QT_PREFIX=C:/Qt/Qt5.12.4/5.12.4/msvc2017_64
    set O4W_QT_BINARIES=C:/Qt/Qt5.12.4/5.12.4/msvc2017_64/bin
    set O4W_QT_PLUGINS=C:/Qt/Qt5.12.4/5.12.4/msvc2017_64/plugins
    set O4W_QT_LIBRARIES=C:/Qt/Qt5.12.4/5.12.4/msvc2017_64/lib
    set O4W_QT_TRANSLATIONS=C:/Qt/Qt5.12.4/5.12.4/msvc2017_64/translations
    set O4W_QT_HEADERS=C:/Qt/Qt5.12.4/5.12.4/msvc2017_64/include
    set O4W_QT_DOC=C:/Qt/Qt5.12.4/5.12.4/msvc2017_64/doc

    11、在osgeo4w的安装路径下新建bat文件,输入:

    @echo off
    call $GIS_PATHms-windowosgeo4wmsvc-env.bat x86_64
    @cmd

    其中$GIS_PATH指qgis的源码解压目录。

    然后启动vs2017开发者命令行,执行该bat文件,再执行cmake-gui

    12、在cmake中配置qgis的源码路径,并新建build路径用于存放生成的工程文件和编译生成的文件。我的如下:

    13、点击cmake的Configure,第一次Configure不会成功,会有错误。具体需要修改的配置如下,然后重新Configure并修改错误。以下配置不是一次就能全部修改到,需要多次Configure。

    1)在CMAKE_CXX_FLAGS后加入 /MP /utf-8,用来加快编译速度和解决无法识别字符的问题。
    (2)去除ENABLE_TESTS、WITH_BINDINGS、WITH_QTWEBKIT、WITH_GRASS7的勾选,如果需要TESTS工程,可以不去除,其他的必须去除,因为没有安装相关依赖,如果需要请自行研究或者关注我后续的教程。
    (3)勾选WITH_CUSTOM_WIDGETS、WITH_QSPATIALITE;
    (4)修改PYTHON_EXECUTABLE的路径为C:OSGeo4W64appsPython37python.exe,此处必须进行修改,系统识别到的路径在编译的时候会报python的setlocal错误。
    (5)设置配置项中Qwt、QCA、Qtkeychain的INCLUDE_DIR和LIBRARY路径,需要注意的是QCA的INCLUDE_DIR一定要指到QtCrypto目录,Qtkeychain的INCLUDE_DIR一定要指到qt5keychain目录。
    (6)如果需要定义QGIS的安装路径,请修改CMAKE_INSTALL_PREFIX。

    14、Configure成功后,点击cmake的Generate,我Configure成功后的截图如下,请忽略OpenCL,其他都是一样的。

    15、点击cmake的Open Project,修改工程的Debug配置下的lib库的输入,截图如下,红色框中的4个库需要改成debug,截图中我已经修改,请大家根据实际路径和名称进行修改,因为涉及修改工程配置,而如果在前面cmake配置时勾选了TESTS工程会多达130多个,不勾选只有50左右。

    16、修改完成后即可进行编译,建议使用vs的生成菜单下的批生成,具体选择如下,ALL_BUILD选择除Release外的3个:

    INSTALL选择Release,因为INSTALL也会进行编译:

    17、如果前面所有的安装和配置没有错误的话,此处编译只是漫长的等待而已,一般都是4个小时,机器好时间会短些。

    18、INSTALL完成后就能在安装目录看到如下内容,大家看到的只会比我的多,因为我删掉了不需要的东西。:

    我们需要关心的是bin,include,lib,plugins这4个目录,默认现在这4个目录中安装的是release版本,那包括debug的其他3个版本的相关文件怎么来?所有需要的文件都在步骤11配置时设定的build路径中。建议大家使用Everything这个软件进行指定目录搜索和这4个目录中的同名文件就能看到了,至于怎么用就看各位自己的了,编译教程到此结束。

    PS:转载请注明出处,本人保留相关权利。

    参考链接:

    1、https://blog.csdn.net/deirjie/article/details/72902343

    2、https://blog.csdn.net/deirjie/article/details/63713033

  • 相关阅读:
    函数组件在react懒加载的方式
    axios 封装
    react高阶组件+ref转发的组合使用
    Iterator & Iterable 和 Comparable&Comparator
    java.lang.Collections
    虚拟机类加载学习和思考
    垃圾收集器与内存分配策略
    jvm内存区域与内存溢出
    spring装配Bean过程
    索引知识点补充
  • 原文地址:https://www.cnblogs.com/superbi/p/11188145.html
Copyright © 2011-2022 走看看