QGIS开发(一)——环境配置

摘要:
官方教程非常重要。您可以在GitHub(https://github.com/qgis)首先,您需要下载整个项目,然后使用记事本++和其他软件下载环境配置过程中所需的内容。QGIS可以在Linux上编译,然后您需要从连接下载以下软件包(64位版本由作者统一使用):文件下载路径并不重要。
https://blog.csdn.net/qq_34357717/article/details/81305084 简介

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

注意

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

官方教程很重要

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

QGIS开发(一)——环境配置第1张

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

QGIS开发(一)——环境配置第2张

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

QGIS开发(一)——环境配置第3张

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

环境配置过程

下载所需内容

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

QGIS开发(一)——环境配置第4张

QGIS开发(一)——环境配置第5张

然后需要从连接中下载以下软件包(笔者统一使用的是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,下载完后都是选择高级安装。

QGIS开发(一)——环境配置第6张

从网络下载

QGIS开发(一)——环境配置第7张

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

QGIS开发(一)——环境配置第8张

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

QGIS开发(一)——环境配置第9张

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

QGIS开发(一)——环境配置第10张

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

QGIS开发(一)——环境配置第11张

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

cygwin:

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

OSGeo4W:

- qgis-rel-deps
 

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

QGIS开发(一)——环境配置第12张

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

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

QGIS开发(一)——环境配置第13张

编译源码

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

@echo off
 call X:srcqgisms-windowsosgeo4wmsvc-env.bat x86_64
 @cmd

  1.  
    @echo off
  2.  
    call X:srcqgisms-windowsosgeo4wmsvc-env.bat x86_64
  3.  
    @cmd

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

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

QGIS开发(一)——环境配置第14张

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

  1.  
    @echo off
  2.  
    REM ***************************************************************************
  3.  
    REM msvc-env.cmd
  4.  
    REM ---------------------
  5.  
    REM begin : June 2018
  6.  
    REM copyright : (C) 2018 by Juergen E. Fischer
  7.  
    REM email : jef at norbit dot de
  8.  
    REM ***************************************************************************
  9.  
    REM * *
  10.  
    REM * This program is free software; you can redistribute it and/or modify *
  11.  
    REM * it under the terms of the GNU General Public License as published by *
  12.  
    REM * the Free Software Foundation; either version 2 of the License, or *
  13.  
    REM * (at your option) any later version. *
  14.  
    REM * *
  15.  
    REM ***************************************************************************
  16.  
     
  17.  
    set ARCH=%1
  18.  
    if not "%ARCH%"=="x86" if not "%ARCH%"=="x86_64" (
  19.  
    goto usage
  20.  
    )
  21.  
     
  22.  
    if "%OSGEO4W_ROOT%"=="" (
  23.  
    if "%ARCH%"=="x86" (
  24.  
    set OSGEO4W_ROOT=C:OSGeo4W
  25.  
    set VCARCH=x86
  26.  
    ) else (
  27.  
    set OSGEO4W_ROOT=C:OSGeo4W64
  28.  
    set VCARCH=amd64
  29.  
    )
  30.  
    )
  31.  
     
  32.  
    if not exist "%OSGEO4W_ROOT%ino4w_env.bat" (echo o4w_env.bat not found & goto error)
  33.  
    call "%OSGEO4W_ROOT%ino4w_env.bat"
  34.  
    call "%OSGEO4W_ROOT%inpy3_env.bat"
  35.  
    call "%OSGEO4W_ROOT%inqt5_env.bat"
  36.  
     
  37.  
    if not "%PROGRAMFILES(X86)%"=="" set PF86=%PROGRAMFILES(X86)%
  38.  
    if "%PF86%"=="" set PF86=%PROGRAMFILES%
  39.  
    if "%PF86%"=="" (echo PROGRAMFILES not set & goto error)
  40.  
     
  41.  
    set VS140COMNTOOLS=%PF86%Microsoft Visual Studio 14.0Common7Tools
  42.  
    call "%PF86%Microsoft Visual Studio 14.0VCvcvarsall.bat" %VCARCH%
  43.  
    path %path%;%PF86%Microsoft Visual Studio 14.0VCin
  44.  
     
  45.  
    set GRASS7=
  46.  
    if exist %OSGEO4W_ROOT%ingrass72.bat set GRASS7=%OSGEO4W_ROOT%ingrass72.bat
  47.  
    if exist %OSGEO4W_ROOT%ingrass74.bat set GRASS7=%OSGEO4W_ROOT%ingrass74.bat
  48.  
    if "%GRASS7%"=="" (echo GRASS7 not found & goto error)
  49.  
    for /f "usebackq tokens=1" %%a in (`%GRASS7% --config path`) do set GRASS_PREFIX=%%a
  50.  
     
  51.  
    set PYTHONPATH=
  52.  
    if exist "%PROGRAMFILES%CMakein" path %PATH%;%PROGRAMFILES%CMakein
  53.  
    if exist "%PF86%CMakein" path %PATH%;%PF86%CMakein
  54.  
    if exist c:cygwin64in path %PATH%;c:cygwin64in
  55.  
    if exist c:cygwinin path %PATH%;c:cygwinin
  56.  
    path
  57.  
     
  58.  
    set LIB=%LIB%;%OSGEO4W_ROOT%appsQt5lib;%OSGEO4W_ROOT%lib
  59.  
    set INCLUDE=%INCLUDE%;%OSGEO4W_ROOT%appsQt5include;%OSGEO4W_ROOT%include
  60.  
     
  61.  
    goto end
  62.  
     
  63.  
    :usage
  64.  
    echo usage: %0 arch
  65.  
    echo sample: %0 x86_64
  66.  
    exit /b 1
  67.  
     
  68.  
    :error
  69.  
    echo ENV ERROR %ERRORLEVEL%: %DATE% %TIME%
  70.  
    exit /b 1
  71.  
     
  72.  
    :end

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

OSGEO4W_ROOT(OSGeo4W的根目录)

PF86(软件默认安装目录)

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

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

PYTHONPATH(SIP包所在路径)

LIB(OSGeo4W依赖库头文件)

INCLUDE(OSGeo4W静态库文件)

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

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


修改方法:

1、利用批处理文件修改

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

  1.  
    @echo off
  2.  
    set VS150COMNTOOLS = C:Program Files (x86)Microsoft Visual Studio2017CommunityVCAuxiliaryBuildvcvarsall.bat" x64
  3.  
     
  4.  
    set OSGEO4W_ROOT=E:QGISdevelopOSGeo4W64
  5.  
    call "%OSGEO4W_ROOT%ino4w_env.bat"
  6.  
    path %PATH%;E:QGISdevelopCMAKEin;E:QGISdevelopcygwinin;E:QGISdevelopOSGeo4W64appsPython36
  7.  
     
  8.  
    @set GRASS_PREFIX=E:/QGISdevelop/OSGeo4W64/apps/grass/grass-7.4.1
  9.  
    @set INCLUDE=%INCLUDE%;%OSGEO4W_ROOT%include
  10.  
    @set LIB=%LIB%;%OSGEO4W_ROOT%lib;%OSGEO4W_ROOT%lib
  11.  
     
  12.  
    @cmd

在CMD中运行这个BAT

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

QGIS开发(一)——环境配置第15张

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

QGIS开发(一)——环境配置第16张

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


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

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

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

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

QGIS开发(一)——环境配置第17张

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

QGIS开发(一)——环境配置第18张

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

QGIS开发(一)——环境配置第19张

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

QGIS开发(一)——环境配置第20张

QGIS开发(一)——环境配置第21张

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

QGIS开发(一)——环境配置第22张

QGIS开发(一)——环境配置第23张

然后是各个库

QGIS开发(一)——环境配置第24张

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

QGIS开发(一)——环境配置第25张

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

QGIS开发(一)——环境配置第26张

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

QGIS开发(一)——环境配置第27张

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

QGIS开发(一)——环境配置第28张

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

QGIS开发(一)——环境配置第29张QGIS开发(一)——环境配置第30张

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

QGIS开发(一)——环境配置第31张

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

QGIS开发(一)——环境配置第32张

QGIS开发(一)——环境配置第33张

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

QGIS开发(一)——环境配置第34张

QGIS开发(一)——环境配置第35张

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

免责声明:文章转载自《QGIS开发(一)——环境配置》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇浅谈前端SPA(单页面应用)Golang中使用lua进行扩展下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Javascript模块化开发1——package.json详解

一、环境安装 Node.js 安装包及源码下载地址为:https://nodejs.org/en/download/。 在该页面你可以根据不同平台系统选择你需要的 Node.js 安装包。 Node.js里面集成了npm,npm是一种包管理工具,允许用户从NPM服务器下载别人编写的包或命令行程序并分享自己编写的包或命令行程序。 二、创建模块 输入命令npm...

nginx源码分析:module机制

 根据nginx官方文档,添加一个module的介绍,当我们需要添加一个module时,需要以下操作: 1、为该module新建一个目录。 2、添加一个config文件,一个module核心代码源文件。 3、为configure添加参数--add-module=/path/to/module,然后重新编译。 这个操作步骤我们都很熟悉,那么为什么这样操作后就...

Odoo configuration items

[options] addons_path = /opt/odoo/server/openerp/addons,/opt/odoo/server/addons admin_passwd = admin auto_reload = False csv_internal_sep = , data_dir = /opt/odoo/.local/shar...

使用CMake构建OpenCV项目

这篇文章我们来对我们的安装进行测试,并介绍如何用CMake工具快捷地构建OpenCV项目。 为了使整个项目更加条理,我们的文件夹采用如下组织方式: binbuildCMakeLists.txtsrc 其中bin目录用于放编译生成的可执行文件,build目录用于cmake构建项目,src用于放源代码。"CMakeLists.txt"这个名字,一个...

rsync(一):基本命令和用法

以下是rsync系列篇: 1.1 说在前面的话 rsync官方网站: https://www.samba.org/ftp/rsync/rsync.html rsync是可以实现增量备份的工具。配合任务计划,rsync能实现定时或间隔同步,配合inotify或sersync,可以实现触发式的实时同步。 rsync可以实现scp的远程拷贝(rsync不支持远程...

术语“go”不被识别为cmdlet,函数,脚本文件或可操作程序的名称

1、执行:    $env:Path = [System.Environment]::GetEnvironmentVariable("Path","Machine")    术语“go”不被识别为cmdlet,函数,脚本文件或可操作程序的名称 原文链接:https://www.ojit.com/article/205133...