简介

QGIS是一个免费的、开源的、跨平台(LIN/WIN/Mac)的地理信息系统(GIS),有简单、体积小、硬件要求低等特性,适合用于GIS的开发。作为开源项目,我们可以在GitHub上很轻松的找到QGIS的源码。QGIS和很多开源项目一样,使用CMAKE进行编译,这其中就会涉及到一些困难的地方。

注意

无论是这篇博客或是其他地方的博客,随着时间的推移和QGIS源码的更新,难免会和官方产生脱节,例如依赖库的版本不一样,这时如果像笔者一样照着旧版本的博客做,很可能在编译中出现各种麻烦的问题,因此,建议一切以官方教程为准。笔者下文所提及的内容,都是以2018年7月20日的文档内容作为参考的。

官方教程很重要

在GitHub上可以找到QGIS项目的主页(https://github.com/qgis)

首先需要将整个项目下载下来

然后利用notepad++等软件,打开根目录中的INSTALL文件,当然直接在浏览器中打开也是可以的。

英文好的同学直接对着这个文档基本上可以完成编译了, 当然笔者也还是把自己的经验总结在了下面。

环境配置过程

下载所需内容

QGIS可以在linux上编译,但基于使用习惯,笔者使用window10平台进行编译。首先,IDE我们肯定是选用微软的visual Studio,和教程中使用VS2015稍有不同的是,笔者在这里使用的是VS2017。当然,还是要用到VC++2015的库,这个一般情况下是不带了,需要修改VS的功能,添加相应的工具集。

然后需要从连接中下载以下软件包(笔者统一使用的是64位的版本):

| Tool |  | Website |
| CMake | https://cmake.org/files/v3.7/cmake-3.7.2-win64-x64.msi 
| cygwin | http://cygwin.com/setup-x86.exe (32bit) or http://cygwin.com/setup-x86_64.exe (64bit) 
| OSGeo4W | http://download.osgeo.org/osgeo4w/osgeo4w-setup-x86.exe (32bit) or http://download.osgeo.org/osgeo4w/osgeo4w-setup-x86_64.exe (64bit) |
| ninja | https://github.com/ninja-build/ninja/releases/download/v1.7.2/ninja-win.zip 

对于cygwin和OSGeo4W,下载完后都是选择高级安装。

从网络下载

当然路径避免出现中文或符号,如非安装在默认路径,建议新建一个文件夹把这些包整理到一起,方便查找需要的内容。

文件下载路径不怎么关键,只是暂时存放而已,默认就行

连接方法,有代理用代理,没有直接选直连也没什么问题,当然下载速度可能受到影响。

下载站点也是随便选,如果速度实在太慢的话也可以尝试换一个。

在选包界面的搜索栏输入文档中给出的包名,目前官方文档给出的是:

cygwin:

- bison
- flex
- git(其实git到不是这么必要,当然下载多一个也没什么问题)

OSGeo4W:

- qgis-rel-deps

另外之后编译的过程中如果发现有缺失的包也是可以重新在这里补充下载的。

直接下一步完成安装即可。

安装完cygwin和OSGeo4W后,讲ninja.exe复制到之前安装OSGeo4W目录的OSGeo4W64\bin\下。、

编译源码

找到OSGeo4W的安装路径,在下面新建一个文本文档,输入并修改红色字体部分为你的源码路径。

@echo off
 call X:\src\qgis\ms-windows\osgeo4w\msvc-env.bat x86_64
 @cmd

@echo offcall X:\src\qgis\ms-windows\osgeo4w\msvc-env.bat x86_64@cmd

(【X:\src\qgis】即从GitHub上下载的源码包解压后的位置,实在找不到也可以试试搜索msvc-env.bat这个文件然后根据其路径修改)

将这个文本文档的文件名修改为【OSGeo4W-dev.bat】保存在OSGeo4W的安装目录下,然后运行它。

这是官方文档给出的方法,但是如果直接照做,之前的安装路径又有所修改的话,很可能会报错,例如找不到文件,其实这是因为环境变量没有修改的原因,其实官方文档的方法就是直接调用了msvc-dev.bat这个批处理文件而已,根据这个提示右键编辑查看msvc-dev.bat这个文件。

@echo off
REM ***************************************************************************
REM    msvc-env.cmd
REM    ---------------------
REM    begin                : June 2018
REM    copyright            : (C) 2018 by Juergen E. Fischer
REM    email                : jef at norbit dot de
REM ***************************************************************************
REM *                                                                         *
REM *   This program is free software; you can redistribute it and/or modify  *
REM *   it under the terms of the GNU General Public License as published by  *
REM *   the Free Software Foundation; either version 2 of the License, or     *
REM *   (at your option) any later version.                                   *
REM *                                                                         *
REM ***************************************************************************set ARCH=%1
if not "%ARCH%"=="x86" if not "%ARCH%"=="x86_64" (goto usage
)if "%OSGEO4W_ROOT%"=="" (if "%ARCH%"=="x86" (set OSGEO4W_ROOT=C:\OSGeo4Wset VCARCH=x86) else (set OSGEO4W_ROOT=C:\OSGeo4W64set VCARCH=amd64)
)if not exist "%OSGEO4W_ROOT%\bin\o4w_env.bat" (echo o4w_env.bat not found & goto error)
call "%OSGEO4W_ROOT%\bin\o4w_env.bat"
call "%OSGEO4W_ROOT%\bin\py3_env.bat"
call "%OSGEO4W_ROOT%\bin\qt5_env.bat"if not "%PROGRAMFILES(X86)%"=="" set PF86=%PROGRAMFILES(X86)%
if "%PF86%"=="" set PF86=%PROGRAMFILES%
if "%PF86%"=="" (echo PROGRAMFILES not set & goto error)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\binset GRASS7=
if exist %OSGEO4W_ROOT%\bin\grass72.bat set GRASS7=%OSGEO4W_ROOT%\bin\grass72.bat
if exist %OSGEO4W_ROOT%\bin\grass74.bat set GRASS7=%OSGEO4W_ROOT%\bin\grass74.bat
if "%GRASS7%"=="" (echo GRASS7 not found & goto error)
for /f "usebackq tokens=1" %%a in (`%GRASS7% --config path`) do set GRASS_PREFIX=%%aset PYTHONPATH=
if exist "%PROGRAMFILES%\CMake\bin" path %PATH%;%PROGRAMFILES%\CMake\bin
if exist "%PF86%\CMake\bin" path %PATH%;%PF86%\CMake\bin
if exist c:\cygwin64\bin path %PATH%;c:\cygwin64\bin
if exist c:\cygwin\bin path %PATH%;c:\cygwin\bin
pathset LIB=%LIB%;%OSGEO4W_ROOT%\apps\Qt5\lib;%OSGEO4W_ROOT%\lib
set INCLUDE=%INCLUDE%;%OSGEO4W_ROOT%\apps\Qt5\include;%OSGEO4W_ROOT%\includegoto end:usage
echo usage: %0 arch
echo sample: %0 x86_64
exit /b 1:error
echo ENV ERROR %ERRORLEVEL%: %DATE% %TIME%
exit /b 1:end

不难发现,其中涉及到的重要的环境变量主要有:

OSGEO4W_ROOT(OSGeo4W的根目录)

PF86(软件默认安装目录)

VS140COMNTOOLS(调用VS的vcvarsall.bat批处理文件)

GRASS7(这个的路径中是【/】而不是【\】,要注意)

PYTHONPATH(SIP包所在路径)

LIB(OSGeo4W依赖库头文件)

INCLUDE(OSGeo4W静态库文件)

如果之前更改了路径,修改相应的环境变量即可。

其中,VS140COMNTOOLS是VS2015的变量名,如果是像笔者一样使用VS2017的话,还需要将变量名VS140COMNTOOLS改为VS150COMNTOOLS。


修改方法:

1、利用批处理文件修改

创建一个文本文件,命名path.bat,内容参考如下,路径换成相应安装路径即可,找不到可以搜索一下

@echo off
set VS150COMNTOOLS = C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build\vcvarsall.bat" x64set OSGEO4W_ROOT=E:\QGISdevelop\OSGeo4W64
call "%OSGEO4W_ROOT%\bin\o4w_env.bat"
path %PATH%;E:\QGISdevelop\CMAKE\bin;E:\QGISdevelop\cygwin\bin;E:\QGISdevelop\OSGeo4W64\apps\Python36@set GRASS_PREFIX=E:/QGISdevelop/OSGeo4W64/apps/grass/grass-7.4.1
@set INCLUDE=%INCLUDE%;%OSGEO4W_ROOT%\include
@set LIB=%LIB%;%OSGEO4W_ROOT%\lib;%OSGEO4W_ROOT%\lib@cmd

在CMD中运行这个BAT

2、右键此电脑→属性→高级系统设置→高级→环境变量。

一个一个变量添加或者更改。

3、备份msvc-dev.bat后直接修改里面的相关路径,然后再次运行msvc-dev.bat


通过以上3种方法设置完环境变量之后,官方的教程会讲用git下载源码,如果之前下载过就可以忽略这一步了

接下来是具体的编译了,官方提供了两种方法,使用Trugonly.cmd创建MSVC解决方案文件或者使用cmake-gui

由于各种路径设置的原因,笔者建议还是使用传统的cmake进行编译

打开之前创建的OSGeo4W-dev.bat

打开cmake-gui,设置好源码路径和要输出的路径,然后点击Configure

另外在CMAKE卡中设置项目要安装的路径,推荐设置在一个新的空目录中,避免导致混乱

出现错误也是正常的,关键还是路径的问题,所以说前面环境变量的设置十分重要。另外在WITH中去掉一些不必要的组件,最最最重要的是DESKTOP,然后就是GUI等一些组件,当然直接使用默认的也基本上可以了。

一步一步的指定缺失的路径,首先是flex和bison

然后是各个库

我遇到了这个spatialite版本过旧的问题

这时再次打开之前的OSGeo4W安装程序,搜索这个包并进行安装

问题还是没有解决,这时才发现原来是版本选成了VS17的,这里还是要选择VS2015 64位的版本

设置完成后继续点Configure,有错误则设置好需要的路径直到出现

然后点击Generate,其实这三个按钮点依次点过去,没问题的话就OK了,成功的话可以在指定的文件夹中看到编译成功的项目,用VS打开项目并且重新生成就可以了,当然这可能需要比较长的一段时间。

将活动解决方案设置为RelWithDebInfo,带有调试信息的Release版本。

将启动项目设置成【qgis】,选择核心的项目生成即可,这里我参考了https://blog.csdn.net/quinta_2018_01_09/article/details/79084001这篇博客。但通过查看看依赖项我发现【qgis】还需要依赖【qgis_native】这个项目,因此也把它加上去了。

然后单独编译生成【qgis_core】,如果出现以下问题,定位到出问题的cpp文件,利用记事本对其进行编辑(其他方法亦可),将其编码改为【Unicode】,虽然错误看起来很多,但是实际上几条错误都是在同一个文件中的,实际上需要修改的文件并不多,逐一修改即可。成功生成【qgis_core】后,生成其它项目,出现语法错误处理方式同上,最后生成【qgis】项目。

以上是笔者个人进行QGIS编译的一些经验,欢迎交流指导

QGIS开发(一)——环境配置相关推荐

  1. oculus integration+unity 开发入门——环境配置笔记

    oculus integration+unity 开发入门--环境配置笔记 一.Unity2019安装 二.Android Studio安装 Unity环境配置 一.Unity2019安装 我采用的是 ...

  2. Eclipse开发PHP环境配置

    Eclipse开发PHP环境配置 首先准备好软件: 1. Apache,到这里找个最新版本 2. PHP,到这里下载 3. Eclipse IDE for Java EE Developers,到这里 ...

  3. 关于QGis1.8二次开发的环境配置

    这篇文章是基于已经正确编译并且生成二次开发所需的库文件的基础上的,如果你还没有得到开发的库文件,请参见我的上一篇博文,点击这里查看. OK,要进行二次开发首先就是环境配置.这里使用的QGis版本为1. ...

  4. PHP开发调试环境配置(基于wampserver+Eclipse for PHP Developers )

    因为项目需求,需要开发PHP的项目,所以不得不花点时间开始学习PHP,过程非常要抓狂,还没有开始开发已经被一大堆复杂的环境搭建搞疯了 经过多方实验,决定将过程记录下来,也为了让很多跟我一样从零开始学习 ...

  5. Go程序开发---Go环境配置:CentOS6.5+Go1.8标准包安装

    1.Go安装 1.1Go的三种安装方式 Go有多种安装方式,可以选择自己习惯的方式进行,这里介绍三种安装方式: 1)Go源码安装 2)Go标准包安装 3)第三方工具安装 这里主要介绍下Go标准包在Ce ...

  6. 【基于Python+Flask项目部署系列--03】开发测试环境配置-基于Ubuntu16.04

    一.开发测试环境介绍 前提已经部署完[基于Python+Flask项目部署系列--02]Ubuntu16.04服务器安装.建议部署2套环境:开发测试环境+生产环境. 这篇文章主要讲解测试环境如何配置p ...

  7. 《Electron 开发》 环境配置和Helloworld

    前言: 最近因为要帮别人做一个Mac和Windows平台下都使用的桌面应用,功能很简单,就是一个文本编辑器,所以大致了解了一下跨平台桌面应用开发的框架,知乎上推荐多半是 Electron 和 NW.j ...

  8. Firefly AIO-3399ProC ARM开发板环境配置过程

    一.硬件条件 Firefly AIO-3399ProC + Ubuntu18.04官方固件(5.11号) 二.修改python版本(选做) 讲一下我需要修改Python版本的原因,如果读者不需要的话, ...

  9. Java开发——JDK环境配置

    JDK环境配置 Windows系统配置JDK 1.下载安装JDK:http://www.oracle.com/technetwork/java/javase/downloads/index.html ...

  10. Unity开发Hololens2—环境配置和官方案例发布并部署到设备上

    一.前言 我使用的Unity2018.4.26f1+Hololens2+VS2019设备其实大部分的环境配置的问题和发布官方已经给出了详细的说明,首先是安装工具,然后是.初始化项目并部署第一个应用程序 ...

最新文章

  1. 让VirtualBox的虚拟机器在电脑开机时自动启动
  2. (推荐)叮当——中文语音对话机器人
  3. Go语言中的匿名函数和闭包的样子
  4. 如何撬动机器学习的冰山一角?
  5. java中钩子方法 addShutdownHook 学习使用
  6. Win10 + VSCode踩坑 + vue项目开发:设置vscode终端为管理员权限
  7. EJB3.0异常总结--- Need to specify class name in environment or system property,
  8. IOTA基金会宣布推出终端用户钱包Firefly
  9. java自动校准程序_java – VisualVM校准步骤与Windows 10挂起
  10. linux timerfd_settime函数,Linux的timerfd分析
  11. python基础语法入门大全_python 基础语法——快速入门
  12. python简单的爬虫实例
  13. 通达信指标加密DLL加密解密三个公式源码准确率90%以上超级指标精准买卖绝世指标
  14. (转帖)小菜编程成长记(十二 无熟人难办事?——聊设计模式迪米特法则)
  15. /usr/bin/xauth: file /home/wj/.Xauthority does not exist
  16. AcWing 1017 怪盗基德的滑翔翼
  17. python将panadas写入excel_python pandas写入excel文件的方法示例
  18. Mairadb数据库的备份和恢复
  19. web性能权威指南学习笔记 Item02
  20. 一文弄懂:集肤效应、邻近效应、边缘效应、涡流损耗

热门文章

  1. 男孩年级轻轻就猝死,看到他最后时刻做的事,我被警醒了(漫画)
  2. 【Linux】ps和top进程管理命令
  3. java有声小说如何开发_怎么才能做有声小说播音?有声书主播如何训练?
  4. 【校招面经】阿里巴巴_数据分析岗_面试笔试题
  5. 一文弄懂原子性、临界区、临界资源
  6. tap4fun联合GOCN举办的成都首场 Gopher Meetup 回顾
  7. 怎样提升工单管理效率?
  8. Bitflip问题案例分析
  9. 天龙八部哪个服务器里面人数最多的,天龙八部怀旧服:不删档各大门派人数出来了!你猜哪个门派人多?...
  10. idea 回车, 加号在行首