Windows 10下编译安装QGIS

QGIS是一套跨平台的开源GIS(Geographic Information System)软件。

对于Windows下编译QGIS,QGIS提供了Cygwin、MinGW、OSGeo4W等脚本,但是OSGeo4W仅支持VS 2015。本文详述在Windows 10下使用VS2019编译安装QGIS的操作流程。

注1:随系统环境不同,QGIS编译方法可能略有不同。

注2:限于笔者认知水平与研究深度,难免有不当之处,敬请谅解。

零、系统环境

操作系统:Windows 10

编译器:Visutal Studio Community 2019

CMake:CMake 3.15.0

Git: Git 2.9.3.2 64 bit

NSIS: NSIS 3.06.1

一、获取代码

在”D:\YouQuan\CaeFrameworks\QGIS”下创建如下目录,

 从GitHub下载代码 ,

git clone https://github.com/qgis/QGIS.git
git checkout -b final-3_22_0 final-3_22_0

二、安装依赖

2.1 Cygwin安装依赖包

首先下载安装Cygwin,选择下载临时目录为”C:\Users\Administrator\AppData\Local\Temp”

然后安装以下依赖包

依赖包

版本

说明

flex

2.6.4-2

bison

3.8.2-1

2.2 OSGeo4W安装依赖包

首先下载安装OSGeo4W。由于武汉大学等国内镜像源提供的依赖包版本滞后,因此此处仍旧使用国外镜像源。

镜像源

依赖包版本

OSGeo Download Server

qgis-dev-deps 3.23.0-178-9ae9d40d14-1

Open Source Lab

qgis-dev-deps 3.23.0-178-9ae9d40d14-1

www.norbit.de

qgis-dev-deps 3.23.0-178-9ae9d40d14-1

武汉大学镜像

3.13.0-1


下载安装以下依赖包

依赖包

版本

说明

qgis-dev-deps3.23.0-178-9ae9d40d14-1

注意:由于网络状状态不稳定,OSGeo4w可能不能下载全部的依赖包,导致部分依赖包丢失,可以重复几次下载即可。 

2.3 安装Ninja

下载ninja-win.zip,解压得到ninja.exe。ninja.exe拷贝到C:\OSGeo4W\bin\目录。

依赖包

版本

说明

ninja

1.7.2

三、构建项目

为了配置编译环境,需要设置OSGeo4W、python、Qt等相关环境变量。

新建“C:\OSGeo4W\bin\py3_env.bat”,添加以下内容,

SET PYTHONHOME=%OSGEO4W_ROOT%\apps\Python39
SET PYTHONPATH=%PYTHONHOME%;%PYTHONHOME%\Scripts
PATH %PYTHONPATH%;%PATH%

 新建“C:\OSGeo4W\bin\qt5_env.bat”,添加以下内容,

@echo off
path %OSGEO4W_ROOT%\apps\qt5\bin;%PATH%

set QT_PLUGIN_PATH=%OSGEO4W_ROOT%\apps\Qt5\plugins

set O4W_QT_PREFIX=%OSGEO4W_ROOT:\=/%/apps/Qt5
set O4W_QT_BINARIES=%OSGEO4W_ROOT:\=/%/apps/Qt5/bin
set O4W_QT_PLUGINS=%OSGEO4W_ROOT:\=/%/apps/Qt5/plugins
set O4W_QT_LIBRARIES=%OSGEO4W_ROOT:\=/%/apps/Qt5/lib
set O4W_QT_TRANSLATIONS=%OSGEO4W_ROOT:\=/%/apps/Qt5/translations
set O4W_QT_HEADERS=%OSGEO4W_ROOT:\=/%/apps/Qt5/include
set O4W_QT_DOC=%OSGEO4W_ROOT:\=/%/apps/Qt5/doc

新建“C:\OSGeo4W\bin\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)

 新建“D:\YouQuan\CaeFrameworks\QGIS\qgis-dev.bat”,添加以下内容,

@echo off
set VS16COMNTOOLS = C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\Common7\Tools\
call "C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Auxiliary\Build\vcvarsall.bat" x64
set INCLUDE=%INCLUDE%;C:\Program Files (x86)\Windows Kits\10\Include
set LIB=%LIB%;C:\Program Files (x86)\Windows Kits\10\Lib

rem OSGeo4W directory
set OSGEO4W_ROOT=C:\OSGeo4W
call "%OSGEO4W_ROOT%\bin\o4w_env.bat"
call "%OSGEO4W_ROOT%\bin\py3_env.bat"
call "%OSGEO4W_ROOT%\bin\qt5_env.bat"
set O4W_ROOT=%OSGEO4W_ROOT:\=/%
set LIB_DIR=%O4W_ROOT%

path %PATH%;C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30133\bin;
path %PATH%;C:\Program Files\CMake\bin;C:\cygwin64\bin

@set GRASS_PREFIX=C:\OSGeo4W\apps\grass\grass78
@set INCLUDE=%INCLUDE%;%OSGEO4W_ROOT%\include
@set LIB=%LIB%;%OSGEO4W_ROOT%\lib;%OSGEO4W_ROOT%\lib
set LIB=%LIB%;%OSGEO4W_ROOT%\apps\Qt5\lib;%OSGEO4W_ROOT%\lib
set INCLUDE=%INCLUDE%;%OSGEO4W_ROOT%\apps\Qt5\include;%OSGEO4W_ROOT%\include
@cmd

然后在命令行中中启动CMake,

cmake-gui

按照下表配置CMake,

Where is the source code

D:/YouQuan/CaeFrameworks/QGIS/QGIS

Where to build the binaries

D:/YouQuan/CaeFrameworks/QGIS/BUILD

CMAKE_INSTALL_PREFIX

D:/YouQuan/CaeFrameworks/QGIS/INSTALL

WITH_BINDINGSFALSE

BUILD_TESTING

FALSE

ENABLE_TESTS

FALSE

然后构建并生成VS项目qgis.sln。

四、编译安装

CMake构建成功之后,直接在CMake中打开qgis.sln,切换到”Release”配置模式,构建“ALL_BUILD”项目,完成QGIS的编译;构建“INSTALL”项目完成QGIS的安装。

Ref. from QGIS INSTALL

Change Solution Configuration from Debug to RelWithDebInfo (Release with Debug Info) or Release before you build QGIS using the ALL_BUILD target (otherwise you need debug libraries that are not included).

注意:由于目前OSG4W提供的qgis-dev-deps对于部分依赖包仅提供Release版本的库文件,可能会造成Debug配置模块编译报错

设置qgis项目为启动项目,运行启动qgis,验证QGIS编译成功。

五、制作安装包

5.1 安装工具包

QGIS使用NSIS来制作安装包,因此,需要下载安装NSIS等工具。

工具

版本

说明

perl5.30.3-1通过Cygwin安装
wget1.21.1-1通过Cygwin安装
NSIS3.06.1下载NSIS 

5.2 生成安装包

首先,将"D:/YouQuan/CaeFrameworks/QGIS/INSTALL"目录下的文件拷贝到"D:/YouQuan/CaeFrameworks/QGIS/QGIS/ms-windows/osgeo4w/unpacked/apps/qgis/"目录中。

然后,在OSGeo4W中,运行quickpackage.sh脚本即可,

cd D:\YouQuan\CaeFrameworks\QGIS\QGIS\ms-windows\
./quickpackage.sh

附录A:常见问题

Q1. CMake构建项目时,提示找不到”pyuic5”

A1.修改”D:\YouQuan\CaeFrameworks\QGIS\QGIS\cmake\PyQtMacros.cmake”

Q2. 编译QGIS时,访问QgsField::ConfigurationFlags::None等枚举类型报错。

 A2. 修改moc_qgsfields.cpp,

static const uint qt_meta_data_QgsField[] = {

 // content:
       7,       // revision
       0,       // classname
       0,    0, // classinfo
       0,    0, // methods
      12,   14, // properties
       2,   50, // enums/sets
       0,    0, // constructors
       4,       // flags
       0,       // signalCount

 // properties: name, type, flags
       1, QMetaType::Bool, 0x00095001,
       2, QMetaType::Bool, 0x00095001,
       3, QMetaType::Int, 0x00095103,
       4, QMetaType::Int, 0x00095103,
       5, 0x80000000 | 6, 0x0009510b,
       7, QMetaType::QString, 0x00095103,
       8, QMetaType::QString, 0x00095103,
       9, QMetaType::QString, 0x00095103,
      10, 0x80000000 | 11, 0x0009510b,
      12, 0x80000000 | 13, 0x0009510b,
      14, 0x80000000 | 15, 0x0009510b,
      16, QMetaType::Bool, 0x00095003,

 // enums: name, flags, count, data
      17, 0x2,    4,   58,
      15, 0x3,    4,   66,

 // enum data: key, value
      18, uint(QgsField::ConfigurationFlag::None),
      19, uint(QgsField::ConfigurationFlag::NotSearchable),
      20, uint(QgsField::ConfigurationFlag::HideFromWms),
      21, uint(QgsField::ConfigurationFlag::HideFromWfs),
      //18, uint(QgsField::ConfigurationFlags::None),
      18, uint(QgsField::ConfigurationFlags::enum_type::None),
      //19, uint(QgsField::ConfigurationFlags::NotSearchable),
      19, uint(QgsField::ConfigurationFlags::enum_type::NotSearchable),
      //20, uint(QgsField::ConfigurationFlags::HideFromWms),
      20, uint(QgsField::ConfigurationFlags::enum_type::HideFromWms),
      //21, uint(QgsField::ConfigurationFlags::HideFromWfs),
      21, uint(QgsField::ConfigurationFlags::enum_type::HideFromWfs),

       0        // eod
};

网络资料

QGIShttps://www.qgis.org/en/site/

QGIS GItHubhttps://github.com/qgis/QGIS

QGIS最新编译指南(QGIS3.18.1-VS2017,2021年)https://blog.csdn.net/weixin_43829992/article/details/115868573

QGIS datahttps://qgis.org/downloads/data/

参考文献

孟庆祥. OpenGIS设计开发基础教程-基于QGIS+PostGIS设计开发. 武汉大学出版社, 2018.

  • 6
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值