赞
踩
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
首先下载安装Cygwin,选择下载临时目录为”C:\Users\Administrator\AppData\Local\Temp”
然后安装以下依赖包
依赖包 | 版本 | 说明 |
flex | 2.6.4-2 | |
bison | 3.8.2-1 |
首先下载安装OSGeo4W。由于武汉大学等国内镜像源提供的依赖包版本滞后,因此此处仍旧使用国外镜像源。
镜像源 | 依赖包版本 |
qgis-dev-deps 3.23.0-178-9ae9d40d14-1 | |
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-deps | 3.23.0-178-9ae9d40d14-1 |
注意:由于网络状状态不稳定,OSGeo4w可能不能下载全部的依赖包,导致部分依赖包丢失,可以重复几次下载即可。
下载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_BINDINGS | FALSE |
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
fromDebug
toRelWithDebInfo
(Release with Debug Info) orRelease
before you build QGIS using theALL_BUILD
target (otherwise you need debug libraries that are not included).
注意:由于目前OSG4W提供的qgis-dev-deps对于部分依赖包仅提供Release版本的库文件,可能会造成”Debug”配置模块编译报错。
设置”qgis”项目为启动项目,运行启动qgis,验证QGIS编译成功。
QGIS使用NSIS来制作安装包,因此,需要下载安装NSIS等工具。
工具 | 版本 | 说明 |
perl | 5.30.3-1 | 通过Cygwin安装 |
wget | 1.21.1-1 | 通过Cygwin安装 |
NSIS | 3.06.1 | 下载NSIS |
首先,将"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
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.
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。