一、摘要:

搜索网络没有发现一篇文章完整的介绍如何编译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:\OSGeo4W64\bin),路径可在第3步中修改,建议别改,后续的bat脚本会用到这个路径。

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

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

6、qtkeychain的编译

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

7、qca的编译

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

8、QScintilla的编译

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

9、配置msvc-env.bat

$QGIS_PATH\ms-window\osgeo4w\msvc-env.bat中的
set VS140COMNTOOLS=%PF86%\Microsoft Visual Studio 14.0\Common7\Tools\
call "%PF86%\Microsoft Visual Studio 14.0\VC\vcvarsall.bat" %VCARCH%
path %path%;%PF86%\Microsoft Visual Studio 14.0\VC\bin

set VS150COMNTOOLS=%PF86%\Microsoft Visual Studio\\Enterprise\Common7\Tools\
call "%PF86%\Microsoft Visual Studio\2017\Enterprise\VC\Auxiliary\Build\vcvarsall.bat" %VCARCH%
path %path%;%PF86%\Microsoft Visual Studio\\Enterprise\VC\Tools\MSVC\14.16.\bin\Hostx64\x64 注释GRASS7的内容,因为用不上,如果有需要请自行在osgeo4w中安装:
set GRASS7=
if exist %OSGEO4W_ROOT%\bin\grass74.bat set GRASS7=%OSGEO4W_ROOT%\bin\grass74.bat
if exist %OSGEO4W_ROOT%\bin\grass76.bat set GRASS7=%OSGEO4W_ROOT%\bin\grass76.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:\OSGeo4W64\bin下添加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./msvc2017_64/bin;%PATH%
set QT_PLUGIN_PATH=C:/Qt/Qt5.12.4/5.12./msvc2017_64/plugins
set O4W_QT_PREFIX=C:/Qt/Qt5.12.4/5.12./msvc2017_64
set O4W_QT_BINARIES=C:/Qt/Qt5.12.4/5.12./msvc2017_64/bin
set O4W_QT_PLUGINS=C:/Qt/Qt5.12.4/5.12./msvc2017_64/plugins
set O4W_QT_LIBRARIES=C:/Qt/Qt5.12.4/5.12./msvc2017_64/lib
set O4W_QT_TRANSLATIONS=C:/Qt/Qt5.12.4/5.12./msvc2017_64/translations
set O4W_QT_HEADERS=C:/Qt/Qt5.12.4/5.12./msvc2017_64/include
set O4W_QT_DOC=C:/Qt/Qt5.12.4/5.12./msvc2017_64/doc

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

@echo off
call $GIS_PATH\ms-window\osgeo4w\msvc-env.bat x86_64
@cmd

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

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

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

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

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

【全网首发】使用vs2017+qt5.12.4编译64位debug和release的qgis3.4.9的更多相关文章

  1. Win7 下用 VS2015 编译最新 openssl(1.0.2j)包含32、64位debug和release版本的dll、lib(8个版本)

    Win7 64位系统下通过VS2015编译好的最新的OpenSSL(1.0.2j)所有八个版本的链接库, 包含以下八个版本: 1.32位.debug版LIB: 2.32位.release版LIB: 3 ...

  2. VS2017+QT5.12.10+QGIS3.16环境搭建及开发全流程

    题记:大力发展生产力,助力高效采集.(转载请注明出处https://www.cnblogs.com/1024bytes/p/15477374.html) 本篇随笔分为五个部分: 一.获取QGIS3.1 ...

  3. Windows7 QT5.6.0(64位)使用mysql(64位)环境搭建详解

    1 说明 使用环境为:Windows7 VS2015 QT5.6.0(64位),MYSQL 5.7.13(64位). 网上各种错误.模糊.抽象的资料,配置环境花了半天,痛定思痛,总结出来,方便后来人. ...

  4. Visual Studio 2013 编译 64 位 Python 的 C 扩展 (使用 PyObject 包装)

    对于 32 位 Python 的 C 扩展,以前用过 mingW32 编译, 但是 mingW32 不支持 64 位 Python 的 C 扩展编译,详情可见 stackoverflow,这位前辈的大 ...

  5. VS 2013编译64位版本QT 4.8.6及使用cmake为依赖QT生成VS项目时Could NOT find Qt4

    对于一些已经解决的问题,本博客不再讨论.只将本人遇到的问题做简单的说明. 一.VS 2013编译64位版本QT 4.8.6 QT项目官网中,对于QT4,其只提供了windows X86的版本,并且支持 ...

  6. VS2015下编译64位GDAL总结

    使用VS2015编译最新的64位GDAL(最新gdal2.11),确实有一些问题,看来双方还是太新了,有点不兼容,特总结如下. 以前经常用的通过VisualStudio IDE进行编译的方式现在似乎不 ...

  7. 使用MSYS2编译64位gvim

    1. 下载安装MSYS2 在https://msys2.github.io/下载MSYS2,推荐下载x86-64版,此版本内置了MinGW32与MinGW64 安装后首先更新MSYS2系统,顺序执行下 ...

  8. 使用visual c++ 2005编译64位可执行文件

    最近需要将一个32位的程序移植到64位上,由于原来是使用vs2003写的,vs2003本身并不支持编译64位系统上,只能升级到vs2005以上版本.个人还是比较喜欢vs2005,对c++来说,vs20 ...

  9. ubuntu16 64位 编译64位程序和32位程序

    安装了ubuntu16 64位的系统,想在该环境下用gcc编译64位和32位的程序 默认已经安装了64位环境的gcc 1. 首先确认安装的环境是不是64位的 cocoa@cocoaUKlyn:~/De ...

随机推荐

  1. lvcreate命令

    lvcreate Command Examples on Linux : 1. The following command creates a logical volume 15 gigabytes ...

  2. oracle data guard配置dg_broker

    https://community.oracle.com/docs/DOC-1007327 本文主要包括以下内容: 1.  配置dg broker,需要完成以下几个工作: 在主备库配置静态监听注册,注 ...

  3. 领域驱动设计(DDD)的实践经验分享之ORM的思考

    原文:领域驱动设计(DDD)的实践经验分享之ORM的思考 最近一直对DDD(Domain Driven Design)很感兴趣,于是去网上找了一些文章来看看,发现它确实是个好东西.于是我去买了两本关于 ...

  4. C#正则表达式简单案例解析

    正则表达式主要用于字符串的操作. 1.Regex.IsMatch:判断指定的字符串是否符合正则表达式. 2.Regex.Match:提取匹配的字符串,只能提取到第一个符合的字符串.这里还可以使用组来提 ...

  5. 一小部分机器学习算法小结: 优化算法、逻辑回归、支持向量机、决策树、集成算法、Word2Vec等

    优化算法 先导知识:泰勒公式 \[ f(x)=\sum_{n=0}^{\infty}\frac{f^{(n)}(x_0)}{n!}(x-x_0)^n \] 一阶泰勒展开: \[ f(x)\approx ...

  6. 解决com.android.dex.DexException: Multiple dex files define Lcom/google/gson/JsonSerializer;

    我在开发Windows Azure的Mobile Service(隔天补上创建过程)的安卓客户端时,报出了com.android.dex.DexException: Multiple dex file ...

  7. ColorCode是一个在线随机取色工具,可以随机获取十六进制、RGB、HSl等颜色。

    ColorCode是一个在线随机取色工具,可以随机获取十六进制.RGB.HSl等颜色. ColorCode 彩蛋爆料直击现场 ColorCode是一个在线随机取色工具,可以随机获取十六进制.RGB.H ...

  8. 核心思想:想清楚自己创业的目的(如果你没有自信提供一种更好的产品或服务,那就别做了,比如IM 电商 搜索)

    这个时代对于学 IT 的人来说是幸运的.一个普通的程序员可以相对轻易地找到工作,可以轻易拿到比其他行业高得多的工资,甚至自己创建世界级的企业亦非空想.马云.马化腾等企业家的成功,似乎时刻提醒人们:即便 ...

  9. [android自动化构建]之centos安装gradle

    这是android自动化构建系列之环境配置 这里只记录部分gradle相关的配置 下载并解压 下载地址参考这里:https://services.gradle.org/distributions/,未 ...

  10. HTML 关于colgroup的研究

    <colgroup width="20%"></colgroup> <colgroup width="10%"></c ...