一、准备工作

1、下载QGIS源码

最新版本的QGIS源码需要从git上下载。最新的发布版是2.0,下载地址见下。https://github.com/qgis/QGIS/tree/release-2_0。打开网页,在右侧有个Download ZIP即可下载2.0的源码zip包,选择一个地方保存即可,如下图。

2、下载、安装和编译QGIS的依赖库

这里只说明安装QGIS必须的依赖库,其他的可选的这里都不说明。首先是编译所需的工具:

CMake >= 2.8.0

Flex

Bison >= 2.4

上面三个工具安装的时候务必安装在没有空格,没有中文的路径里面,然后将安装之后的bin目录添加到环境变量里面,要不然,后面有你受的。不过也没关系,后面有解决方案。接下来是必须要的第三方库:

Qt >= 4.5.0

Proj >= 4.4.x

GEOS >= 3.0

Sqlite3 >= 3.0.0

GDAL/OGR >= 1.4.x

Qwt >= 5.0 & (< 6.1 with internalQwtPolar)

expat >= 1.95

下载地址就不列了,Google搜索,基本上第一个进去就是官网,然后点击下载就可以了。

二、CMAKE配置

下载后解压QGIS-final-2_0_1的压缩包,然后在同级目录新建一个Build目录,用于保存CMake生成的工程文件和编译后的可执行文件。如下图所示。

接下来打开CMake的GUI程序来配置QGIS的工程文件。先将QGIS的源码目录和上面创建的Build目录选进去,如下图所示。

接下来点击Configure按钮,弹出要生成的工程文件类型,我的电脑安装的是VS2008,所以选择Visual Studio 9 2008,如果是其他的,选择对应的即可,如下图。

点击Finish即可开始配置,接下来就会弹出一些错误信息,来告诉你需要设置QGIS所依赖的第三方库的路径等等。如下图:

点击确定之后,发现有很多底色是红色的配置项,这些就是我们需要修改的。

由于这里只编译最基础的QGIS可执行程序,所以其他的插件全部不进行编译,所以我们将分组中的WITH修改为如下图所示。如果你需要编译插件的话,就勾上,同时后面需要设置插件所依赖的第三方库。

接下来,点击Configure按钮,会在最下面的窗口中以红色的字体提示需要设置那些库,比如首先就会提示要设置Flex库的路径。

设置完Flex的路径之后点击Configure,又会提示Bison没有找到,依次设置完,按照这个步骤设置完所有需要设置的第三方库。

接下来提示设置PROJ和GEOS库

接下来是GDAL

点击完Configure之后会出现一大片的红色,如下图所示。不要恐惧,其实里面大多数都是可以不用设置的。

设置SQLite3和spatialindex库的路径

点击Configure后设置Expat的库

点击Configure后设置QWT的库

接下来点击Configure后提示要设置SetupAPI库的路径,这个库在程序安装目录的Windows SDKs目录里面,如我本机的为“C:/ProgramFiles/Microsoft SDKs/Windows/v6.0A/Lib/SetupAPI.Lib”。

接下来点击Configure会提示SPATIALITE错误,如果你有这个库的话,将路径填进去,如果没有,直接将后面的值删除,留空即可(留空的话后面需要修改一部分源代码)。

接下来再点击Configure按钮,如果正常的话,应该就没有错误提示了,输出窗口会输出如下图所示的信息。

然后接下来点击Generate按钮,生成工程文件。这时在输出窗口会输出信息,如果输出信息里面没有错误就说明没问题,警告信息不属于错误信息,最后出现Generate done的字样就说明生成成功。

然后打开Build目录,你会看到生成的sln文件以及其他的工程文件,至此,QGIS编译之前的配置就到此结束。如下图所示。

三、编译

双击Build目录下的qgis2.0.1.sln或者用VS打开该sln文件,等待VS将整个解决方案加载进来。如下图所示。一共由139个项目组成。

接下来就是编译了,整个编译的过程肯定非常的漫长(我没试过)。首先在qgis的工程右键,打开项目依赖项,如下图所示,将与前面打勾的项目流下来,其他的全部卸载掉。

有个快速的方法就是,首先把所有的工程都先卸载掉,然后加载QGIS依赖的几个就可以了,这样编译起来时间比较少,如果你时间比较多就全部编译吧。

我大概筛选了下,qgis依赖的几个工程如下:

名称

说明

qgis

QGIS可执行程序

qgis_analysis

依赖项

qgis_core

依赖项,QGIS核心库

qgis_gui

依赖项,QGIS界面库

ui

QGIS所有的界面

gdalprovider

读取栅格数据驱动

ogrprovider

读取矢量数据驱动

接下来直接在QGIS工程右键编译即可。正常情况下VS会自动先编译QGIS依赖的几个工程,最后编译QGIS。由于两个provider工程,QGIS是通过插件的形式加载的,不会直接依赖,所以需要最后手动编译。

注意:在编译的时候如果没有将GNU的几个软件安装到没有空格的路径中,或者没有加入环境变量path中,很有可能编译出错,错误信息一般如下:

下面我们就通过手动的方式来解决这个问题,首先在工程中找到编译出错的文件。首先来看qgis_core的错误,

1>Generating qgsexpressionparser.cpp
1>E:\QGIS\GnuWin32\bin\bison.exe: m4: No such fileor directory
1>Project : error PRJ0019: 某个工具从以下位置返回了错误代码:"Generating qgsexpressionparser.cpp"
1>生成日志保存在file://e:\QGIS2\Build\src\core\qgis_core.dir\Debug\BuildLog.htm

我们打开上面的BuildLog.htm,会发现下面的文字:

出错的就是上面选中的那句执行的时候出错了,由于bison所在的目录没有安装到环境变量path里面导致的,我们将上面的这句话复制下,然后打开一个cmd命令行窗口,cd到bison的目录,如下图:

然后在窗口中执行上面的那句话,如果没有输出任何信息就说明OK了,然后回到VS中,继续点击生成即可,其他的flex错误类似这样解决即可。

然后由于之前没有配置SPATIALITE,所以我们需要修改源代码,编译的时候提示spatialite.h文件找不到的,将include“spatialite.h”注释掉,然后再次编译会提示有函数spatialite_init、spatialite_version、spatial_ref_sys_init找不到的,将该行注释掉,然后编译即可。

所有的工程编译完之后,会在Build目录下面的output\bin\debug\目录生成dll和exe,然后只需要将QGIS所有依赖的dll拷贝过来就可以双击qgis.exe运行了。依赖的dll主要有gdal、geos、proj、qt、qwt等。需要注意的是,要把gdalprovider.dll和ogrprovider.dll放到exe目录的plugins目录,否则不能打开数据。目录结构如下图。

下面是编译完启动的界面。如果想要界面汉化的话,使用QT提供的Linguist(语言家)工具,打开QGIS源码目录下的i18n目录下面的qgis_zh_CN.ts,然后点击文件菜单下面的发布为,将存储为一个qgis_zh_CN.qm的文件,最后将这个qm文件放到qgis.exe所在目录中新建一个i18n的目录,放到里面重新启动qgis就可以看到界面汉化了。

李民录2013-12-18

QGIS编译的更多相关文章

  1. QGIS编译教程

    注意更新时间:Thursday November 02, 2017 1. Introduction 简介 This document is the original installation guid ...

  2. QGIS 编译

    QGIS 编译 在编译的过程中花费了很长时间,特别是编译Debug版本.release版本的编译可以从晚上找到很多的资料,但是Debug的编译相对较少.在Debug编译的过程中,需要单独build工程 ...

  3. 记录编译QGIS(3.4+Qt5.11+VS2015)的整个过程

    编译运行整个QGIS耗时耗力,由于本人比较愚钝,来来回回花了大概两个星期最终编译成功,记录一下整个过程,一方面备忘,另一方面可能也给别人一点借鉴. 1.准备工作 参考了许多网上的教程,李民录大神的&l ...

  4. QGis、Qt对话框上的OK、Open、Cancel、Help等英文翻译

    成功编译qgis,启动程序发现对话框上的OK.Open.Cancel.Help等依然是英文字段,然后查找源码看这些字段是否都添加到了语言翻译包中: 最后发现这些按钮都是qt的QTGui4库中的QDia ...

  5. 研究QGIS二次开发笔记(一)

    为了在QT程序中嵌入一个地图,最终选择了QGIS来干这件事.选型阶段真是呵呵.我折腾的是QGIS2.4.0. 首先,到官方网站下载安装QGIS.如果你跟我一样懒的话,可能希望下载一个已经编译好的win ...

  6. 【全网首发】使用vs2017+qt5.12.4编译64位debug和release的qgis3.4.9

    一.摘要: 搜索网络没有发现一篇文章完整的介绍如何编译qgis3.4.x的debug版本,官方的指导也长时间不再更新. 所以前前后后花了4天搞定qgis的debug编译,并成功运行,废话不多说,直接上 ...

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

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

  8. QGis+QT5.9+VS2017源码编译

    1.需要软件 VS2017 QT5.9.2 CMake 3.10.2 Cygwin osgeo4w QGIS源码 2.安装VS2017  过程省略 是由于机器上已经安装了VS2017 3.安装QT5. ...

  9. QGIS(2.18.15 源码)+Qt(5/5.9.3)+VS2015(X64)编译

    由于工作要求,今年需要基于Qt搞跨平台的GIS.前期未曾接触过Qt,最近也简单学习了下,开源的QGIS是非常不错的学习资源,下了最新版的QGIS源码,不过在VS2015下却没法直接打开.网上查了很多资 ...

随机推荐

  1. 剑指架构师系列-持续集成之Maven+Nexus+Jenkins+git+Spring boot

    1.Nexus与Maven 先说一下这个Maven是什么呢?大家都知道,Java社区发展的非常强大,封装各种功能的Jar包满天飞,那么如何才能方便的引入我们项目,为我所用呢?答案就是Maven,只需要 ...

  2. mysql substr() 函数

    mysql substr() 函数 用法:substr(string string,num start,num length); string为字符串:start为起始位置:length为长度. 注意 ...

  3. spring-boot配置静态资源映射的坑:properties文件不能添加注释

    如此博文所述,Spring Boot 对静态资源映射提供了默认配置 默认将 /** 所有访问映射到以下目录:classpath:/staticclasspath:/publicclasspath:/r ...

  4. 毕业论文内容框架指导-适用于MIS系统

    摘要: 背景.要做什么.选用什么技术.按照什么过程.原理.或者步骤去做.最后做出了什么东西.做出来的东西有什么用. 1. 前言 系统的背景与意义:为什么要做这个系统 ? 现状调查:别人做的怎么样? 系 ...

  5. MyBatis批量新增和更新

    之前有开发任务一个接口里面有大量的数据新增和更新操作,导致十分缓慢.使用了批量操作之后速度有明显提升,几乎百倍千倍的速度提升. 博主之前统计过,通过普通接口一次数据库插入大概需要200ms,对于大量新 ...

  6. linux网络编程之一-----多播(组播)编程

    什么是多播 组播(Multicast)是网络一种点对多(one to many)的通信方式,通过报文复制完成网络中一台server对应多台接收者的高效数据传 送.对其形象的比喻就是类似于广播电台和电视 ...

  7. 有无序的实数列V[N],要求求里面大小相邻的实数的差的最大值,关键是要求线性空间和线性时间。

    int findMaxDifBt2Nums(int* arr, int len) { int maxItem = arr[0], minItem = arr[0]; for (int i = 1; i ...

  8. 用Python最原始的函数模拟eval函数的浮点数运算功能(2)

    这应该是我编程以来完成的难度最大的一个函数了.因为可能存在的情况非常多,需要设计合理的参数来控制解析流程.经验概要: 1.大胆假设一些子功能能够实现,看能否建立整个框架.如果在假设的基础上都无法建立, ...

  9. 24 AIDL案例

    服务端 MainActivity.java package com.qf.day24_aidl_wordserver; import android.app.Activity; import andr ...

  10. Dynamics CRM2013 从subgrid中打开快速创建窗体创建数据

    在页面上使用subgrid时,在subgrid中新建数据时需要跳转到另一个页面,这种操作比较麻烦且很不友好,这时我们想到了快速创建窗体,像下图这样直接在当前页上方下拉出现一个窗体,填写内容后点击保存就 ...