QGIS源代码构建

1. 前言

本文档是描述QGIS软件原始安装的指南。本文档中提到的软件和硬件在大多数情况下涉及到注册商标,因此受法律要求的约束。 QGIS 使用 GNU 通用公共许可证。更多信息可以在 QGIS 主页(https://qgis.org)上查找。

本文档中提供的详细信息已根据编辑的知识和责任进行了验证。然而,关于内容的错误在所难免。因此,所有数据均不承担任何责任或保证。编辑和出版商不对可能的失败及其后果承担任何责任或义务。随时欢迎您指出可能的错误。

由于 QGIS 的代码从发布不断演化,这些说明会定期更新以匹配相应的发布。当前主分支的说明可在 https://github.com/qgis/QGIS/blob/master/INSTALL.md 获得。如果您希望构建另一个版本的 QGIS,请确保签出相应的发布分支。 QGIS 源代码可以在Github存储库中找到。

请访问 https://qgis.org 以了解有关加入我们的邮件列表和进一步参与该项目的信息。

文档作者注意事项:请将此文档用作描述构建过程的主要参考资料。请不要删除此注意事项。

2. 概述

QGIS 与许多重要项目(例如 KDE 4.0)一样,使用 CMake 构建源代码。

以下是构建所需依赖的工具和第三方库。

  • 所需的构建工具:

    • CMake >= 3.12.0

    • Flex >= 2.5.6

    • Bison >= 2.4

    • Python >= 3.7

  • 依赖的第三方库:

    • Qt >= 5.12.0

    • Proj >= 4.9.3

    • GEOS >= 3.4

    • Sqlite3 >= 3.0.0

    • SpatiaLite >= 4.2.0

    • libspatialindex

    • GDAL/OGR >= 2.1

    • Qwt >= 5.0 & (< 6.1 with internal QwtPolar)

    • expat >= 1.95

    • QScintilla2

    • QCA

    • qtkeychain (>= 0.5)

    • libzip

  • 可选的依赖:

    • GRASS提供和插件需要 - GRASS >= 7.0.0.

    • Georeferencer需要 - GSL >= 1.8

    • PostGIS支持需要 - PostgreSQL >= 8.0.x

    • Gps插件需要 - gpsbabel

    • Mapserver导出和PyQGIS需要 - Python >= 3.6

    • Python支持需要 - SIP >= 4.12, PyQt >= 5.3 必须匹配 Qt 版本, Qscintilla2

    • 对应qgis mapserver需要 - FastCGI

    • Oracle提供者需要 - Oracle OCI library

  • 间接依赖:

GDAL 支持的一些专有格式(例如 ECW 和 MrSid)需要专有的第三方库。 虽然QGIS 本身不需要依赖这些库来构建,但在构建 GDAL 时需要这些第三方库。 有关如何在 GDAL 中包含这些格式的说明,请参阅GDAL格式列表

3. 在GNU/Linux平台上构建

3.1. 基于Qt 5.x构建QGIS

要求:Ubuntu / Debian 衍生发行版

注意:有关构建 Debian 软件包的信息,请参阅构建 Debian 软件包部分。 除非您打算在 QGIS 上进行开发,否则这可能是编译和安装 QGIS 最简单的选择。

这些注释适用于 Ubuntu,其他版本和 Debian衍生发行版可能需要的包名称略有不同。

这些说明适用于从源代码构建 QGIS。这里的主要目标之一是,展示如何使用二进制依赖从源代码构建核心QGIS的内容。我更喜欢这种方法,因为这意味着我们可以将管理系统包的业务留给 apt,只关心编码QGIS!

本文档假定您已进行全新安装并拥有“干净”的系统。 如果这是一个已经使用了一段时间的系统,这些说明应该可以正常工作,您可能需要跳过那些与您无关的步骤。

3.2. 准备apt

构建QGIS 依赖的包在 Ubuntu 的“universe”组件中可用。这个默认是不激活的,所以你需要激活它:

a) 编辑您的/etc/apt/sources.list文件。

b) 取消注释所有以“deb”开头的行

此外,您将需要足够新的发行版才能满足所有依赖项。 下面将列出支持的发行版。

现在更新您的本地资源数据库:

sudo apt-get update

3.3. 安装构建依赖

发行版本依赖包安装命令
busterapt-get install bison ca-certificates ccache cmake cmake-curses-gui dh-python doxygen expect flex flip gdal-bin git graphviz grass-dev libexiv2-dev libexpat1-dev libfcgi-dev libgdal-dev libgeos-dev libgsl-dev libpdal-dev libpq-dev libproj-dev libprotobuf-dev libqca-qt5-2-dev libqca-qt5-2-plugins libqscintilla2-qt5-dev libqt5opengl5-dev libqt5serialport5-dev libqt5sql5-sqlite libqt5svg5-dev libqt5webkit5-dev libqt5xmlpatterns5-dev libqwt-qt5-dev libspatialindex-dev libspatialite-dev libsqlite3-dev libsqlite3-mod-spatialite libyaml-tiny-perl libzip-dev libzstd-dev lighttpd locales ninja-build ocl-icd-opencl-dev opencl-headers pandoc pdal pkg-config poppler-utils protobuf-compiler pyqt5-dev pyqt5-dev-tools pyqt5.qsci-dev python3-all-dev python3-autopep8 python3-dateutil python3-dev python3-future python3-gdal python3-httplib2 python3-jinja2 python3-lxml python3-markupsafe python3-mock python3-nose2 python3-owslib python3-plotly python3-psycopg2 python3-pygments python3-pyproj python3-pyqt5 python3-pyqt5.qsci python3-pyqt5.qtpositioning python3-pyqt5.qtsql python3-pyqt5.qtsvg python3-pyqt5.qtwebkit python3-requests python3-sip python3-sip-dev python3-six python3-termcolor python3-tz python3-yaml qt3d-assimpsceneimport-plugin qt3d-defaultgeometryloader-plugin qt3d-gltfsceneio-plugin qt3d-scene2d-plugin qt3d5-dev qt5-default qt5keychain-dev qtbase5-dev qtbase5-private-dev qtpositioning5-dev qttools5-dev qttools5-dev-tools saga spawn-fcgi xauth xfonts-100dpi xfonts-75dpi xfonts-base xfonts-scalable xvfb
bullseyeapt-get install bison ca-certificates ccache cmake cmake-curses-gui dh-python doxygen expect flex flip gdal-bin git graphviz grass-dev libexiv2-dev libexpat1-dev libfcgi-dev libgdal-dev libgeos-dev libgsl-dev libpdal-dev libpq-dev libproj-dev libprotobuf-dev libqca-qt5-2-dev libqca-qt5-2-plugins libqscintilla2-qt5-dev libqt5opengl5-dev libqt5serialport5-dev libqt5sql5-sqlite libqt5svg5-dev libqt5webkit5-dev libqt5xmlpatterns5-dev libqwt-qt5-dev libspatialindex-dev libspatialite-dev libsqlite3-dev libsqlite3-mod-spatialite libyaml-tiny-perl libzip-dev libzstd-dev lighttpd locales ninja-build ocl-icd-opencl-dev opencl-headers pandoc pdal pkg-config poppler-utils protobuf-compiler pyqt5-dev pyqt5-dev-tools pyqt5.qsci-dev python3-all-dev python3-autopep8 python3-dateutil python3-dev python3-future python3-gdal python3-httplib2 python3-jinja2 python3-lxml python3-markupsafe python3-mock python3-nose2 python3-owslib python3-plotly python3-psycopg2 python3-pygments python3-pyproj python3-pyqt5 python3-pyqt5.qsci python3-pyqt5.qtpositioning python3-pyqt5.qtsql python3-pyqt5.qtsvg python3-pyqt5.qtwebkit python3-requests python3-sip python3-sip-dev python3-six python3-termcolor python3-tz python3-yaml qt3d-assimpsceneimport-plugin qt3d-defaultgeometryloader-plugin qt3d-gltfsceneio-plugin qt3d-scene2d-plugin qt3d5-dev qt5keychain-dev qtbase5-dev qtbase5-private-dev qtpositioning5-dev qttools5-dev qttools5-dev-tools saga spawn-fcgi xauth xfonts-100dpi xfonts-75dpi xfonts-base xfonts-scalable xvfb
bionicapt-get install bison ca-certificates ccache cmake cmake-curses-gui dh-python doxygen expect flex flip gdal-bin git graphviz grass-dev libexiv2-dev libexpat1-dev libfcgi-dev libgdal-dev libgeos-dev libgsl-dev libpdal-dev libpq-dev libproj-dev libprotobuf-dev libqca-qt5-2-dev libqca-qt5-2-plugins libqscintilla2-qt5-dev libqt5opengl5-dev libqt5serialport5-dev libqt5sql5-sqlite libqt5svg5-dev libqt5webkit5-dev libqt5xmlpatterns5-dev libqwt-qt5-dev libspatialindex-dev libspatialite-dev libsqlite3-dev libsqlite3-mod-spatialite libyaml-tiny-perl libzip-dev libzstd-dev lighttpd locales ninja-build ocl-icd-opencl-dev opencl-headers pandoc pdal pkg-config poppler-utils protobuf-compiler pyqt5-dev pyqt5-dev-tools pyqt5.qsci-dev python3-all-dev python3-autopep8 python3-dateutil python3-dev python3-future python3-gdal python3-httplib2 python3-jinja2 python3-lxml python3-markupsafe python3-mock python3-nose2 python3-owslib python3-plotly python3-psycopg2 python3-pygments python3-pyproj python3-pyqt5 python3-pyqt5.qsci python3-pyqt5.qtpositioning python3-pyqt5.qtsql python3-pyqt5.qtsvg python3-pyqt5.qtwebkit python3-requests python3-sip python3-sip-dev python3-six python3-termcolor python3-tz python3-yaml qt3d-assimpsceneimport-plugin qt3d-defaultgeometryloader-plugin qt3d-gltfsceneio-plugin qt3d-scene2d-plugin qt3d5-dev qt5-default qt5keychain-dev qtbase5-dev qtbase5-private-dev qtpositioning5-dev qttools5-dev qttools5-dev-tools saga spawn-fcgi xauth xfonts-100dpi xfonts-75dpi xfonts-base xfonts-scalable xvfb
focalapt-get install bison ca-certificates ccache cmake cmake-curses-gui dh-python doxygen expect flex flip gdal-bin git graphviz grass-dev libexiv2-dev libexpat1-dev libfcgi-dev libgdal-dev libgeos-dev libgsl-dev libpdal-dev libpq-dev libproj-dev libprotobuf-dev libqca-qt5-2-dev libqca-qt5-2-plugins libqscintilla2-qt5-dev libqt5opengl5-dev libqt5serialport5-dev libqt5sql5-sqlite libqt5svg5-dev libqt5webkit5-dev libqt5xmlpatterns5-dev libqwt-qt5-dev libspatialindex-dev libspatialite-dev libsqlite3-dev libsqlite3-mod-spatialite libyaml-tiny-perl libzip-dev libzstd-dev lighttpd locales ninja-build ocl-icd-opencl-dev opencl-headers pandoc pdal pkg-config poppler-utils protobuf-compiler pyqt5-dev pyqt5-dev-tools pyqt5.qsci-dev python3-all-dev python3-autopep8 python3-dateutil python3-dev python3-future python3-gdal python3-httplib2 python3-jinja2 python3-lxml python3-markupsafe python3-mock python3-nose2 python3-owslib python3-plotly python3-psycopg2 python3-pygments python3-pyproj python3-pyqt5 python3-pyqt5.qsci python3-pyqt5.qtpositioning python3-pyqt5.qtsql python3-pyqt5.qtsvg python3-pyqt5.qtwebkit python3-requests python3-sip python3-sip-dev python3-six python3-termcolor python3-tz python3-yaml qt3d-assimpsceneimport-plugin qt3d-defaultgeometryloader-plugin qt3d-gltfsceneio-plugin qt3d-scene2d-plugin qt3d5-dev qt5-default qt5keychain-dev qtbase5-dev qtbase5-private-dev qtpositioning5-dev qttools5-dev qttools5-dev-tools saga spawn-fcgi xauth xfonts-100dpi xfonts-75dpi xfonts-base xfonts-scalable xvfb
groovyapt-get install bison ca-certificates ccache cmake cmake-curses-gui dh-python doxygen expect flex flip gdal-bin git graphviz grass-dev libexiv2-dev libexpat1-dev libfcgi-dev libgdal-dev libgeos-dev libgsl-dev libpdal-dev libpq-dev libproj-dev libprotobuf-dev libqca-qt5-2-dev libqca-qt5-2-plugins libqscintilla2-qt5-dev libqt5opengl5-dev libqt5serialport5-dev libqt5sql5-sqlite libqt5svg5-dev libqt5webkit5-dev libqt5xmlpatterns5-dev libqwt-qt5-dev libspatialindex-dev libspatialite-dev libsqlite3-dev libsqlite3-mod-spatialite libyaml-tiny-perl libzip-dev libzstd-dev lighttpd locales ninja-build ocl-icd-opencl-dev opencl-headers pandoc pdal pkg-config poppler-utils protobuf-compiler pyqt5-dev pyqt5-dev-tools pyqt5.qsci-dev python3-all-dev python3-autopep8 python3-dateutil python3-dev python3-future python3-gdal python3-httplib2 python3-jinja2 python3-lxml python3-markupsafe python3-mock python3-nose2 python3-owslib python3-plotly python3-psycopg2 python3-pygments python3-pyproj python3-pyqt5 python3-pyqt5.qsci python3-pyqt5.qtpositioning python3-pyqt5.qtsql python3-pyqt5.qtsvg python3-pyqt5.qtwebkit python3-requests python3-sip python3-sip-dev python3-six python3-termcolor python3-tz python3-yaml qt3d-assimpsceneimport-plugin qt3d-defaultgeometryloader-plugin qt3d-gltfsceneio-plugin qt3d-scene2d-plugin qt3d5-dev qt5-default qt5keychain-dev qtbase5-dev qtbase5-private-dev qtpositioning5-dev qttools5-dev qttools5-dev-tools saga spawn-fcgi xauth xfonts-100dpi xfonts-75dpi xfonts-base xfonts-scalable xvfb
hirsuteapt-get install bison ca-certificates ccache cmake cmake-curses-gui dh-python doxygen expect flex flip gdal-bin git graphviz grass-dev libexiv2-dev libexpat1-dev libfcgi-dev libgdal-dev libgeos-dev libgsl-dev libpdal-dev libpq-dev libproj-dev libprotobuf-dev libqca-qt5-2-dev libqca-qt5-2-plugins libqscintilla2-qt5-dev libqt5opengl5-dev libqt5serialport5-dev libqt5sql5-sqlite libqt5svg5-dev libqt5webkit5-dev libqt5xmlpatterns5-dev libqwt-qt5-dev libspatialindex-dev libspatialite-dev libsqlite3-dev libsqlite3-mod-spatialite libyaml-tiny-perl libzip-dev libzstd-dev lighttpd locales ninja-build ocl-icd-opencl-dev opencl-headers pandoc pdal pkg-config poppler-utils protobuf-compiler pyqt5-dev pyqt5-dev-tools pyqt5.qsci-dev python3-all-dev python3-autopep8 python3-dateutil python3-dev python3-future python3-gdal python3-httplib2 python3-jinja2 python3-lxml python3-markupsafe python3-mock python3-nose2 python3-owslib python3-plotly python3-psycopg2 python3-pygments python3-pyproj python3-pyqt5 python3-pyqt5.qsci python3-pyqt5.qtpositioning python3-pyqt5.qtsql python3-pyqt5.qtsvg python3-pyqt5.qtwebkit python3-requests python3-sip python3-sip-dev python3-six python3-termcolor python3-tz python3-yaml qt3d-assimpsceneimport-plugin qt3d-defaultgeometryloader-plugin qt3d-gltfsceneio-plugin qt3d-scene2d-plugin qt3d5-dev qt5keychain-dev qtbase5-dev qtbase5-private-dev qtpositioning5-dev qttools5-dev qttools5-dev-tools saga spawn-fcgi xauth xfonts-100dpi xfonts-75dpi xfonts-base xfonts-scalable xvfb
impishapt-get install bison ca-certificates ccache cmake cmake-curses-gui dh-python doxygen expect flex flip gdal-bin git graphviz grass-dev libexiv2-dev libexpat1-dev libfcgi-dev libgdal-dev libgeos-dev libgsl-dev libpdal-dev libpq-dev libproj-dev libprotobuf-dev libqca-qt5-2-dev libqca-qt5-2-plugins libqscintilla2-qt5-dev libqt5opengl5-dev libqt5serialport5-dev libqt5sql5-sqlite libqt5svg5-dev libqt5webkit5-dev libqt5xmlpatterns5-dev libqwt-qt5-dev libspatialindex-dev libspatialite-dev libsqlite3-dev libsqlite3-mod-spatialite libyaml-tiny-perl libzip-dev libzstd-dev lighttpd locales ninja-build ocl-icd-opencl-dev opencl-headers pandoc pdal pkg-config poppler-utils protobuf-compiler pyqt5-dev pyqt5-dev-tools pyqt5.qsci-dev python3-all-dev python3-autopep8 python3-dateutil python3-dev python3-future python3-gdal python3-httplib2 python3-jinja2 python3-lxml python3-markupsafe python3-mock python3-nose2 python3-owslib python3-plotly python3-psycopg2 python3-pygments python3-pyproj python3-pyqt5 python3-pyqt5.qsci python3-pyqt5.qtpositioning python3-pyqt5.qtsql python3-pyqt5.qtsvg python3-pyqt5.qtwebkit python3-pyqtbuild python3-requests python3-sip python3-six python3-termcolor python3-tz python3-yaml qt3d-assimpsceneimport-plugin qt3d-defaultgeometryloader-plugin qt3d-gltfsceneio-plugin qt3d-scene2d-plugin qt3d5-dev qt5keychain-dev qtbase5-dev qtbase5-private-dev qtpositioning5-dev qttools5-dev qttools5-dev-tools saga sip-tools spawn-fcgi xauth xfonts-100dpi xfonts-75dpi xfonts-base xfonts-scalable xvfb
sidapt-get install bison ca-certificates ccache cmake cmake-curses-gui dh-python doxygen expect flex flip gdal-bin git graphviz grass-dev libexiv2-dev libexpat1-dev libfcgi-dev libgdal-dev libgeos-dev libgsl-dev libpdal-dev libpq-dev libproj-dev libprotobuf-dev libqca-qt5-2-dev libqca-qt5-2-plugins libqscintilla2-qt5-dev libqt5opengl5-dev libqt5serialport5-dev libqt5sql5-sqlite libqt5svg5-dev libqt5webkit5-dev libqt5xmlpatterns5-dev libqwt-qt5-dev libspatialindex-dev libspatialite-dev libsqlite3-dev libsqlite3-mod-spatialite libyaml-tiny-perl libzip-dev libzstd-dev lighttpd locales ninja-build ocl-icd-opencl-dev opencl-headers pandoc pdal pkg-config poppler-utils protobuf-compiler pyqt5-dev pyqt5-dev-tools pyqt5.qsci-dev python3-all-dev python3-autopep8 python3-dateutil python3-dev python3-future python3-gdal python3-httplib2 python3-jinja2 python3-lxml python3-markupsafe python3-mock python3-nose2 python3-owslib python3-plotly python3-psycopg2 python3-pygments python3-pyproj python3-pyqt5 python3-pyqt5.qsci python3-pyqt5.qtpositioning python3-pyqt5.qtsql python3-pyqt5.qtsvg python3-pyqt5.qtwebkit python3-pyqtbuild python3-requests python3-sip python3-six python3-termcolor python3-tz python3-yaml qt3d-assimpsceneimport-plugin qt3d-defaultgeometryloader-plugin qt3d-gltfsceneio-plugin qt3d-scene2d-plugin qt3d5-dev qt5keychain-dev qtbase5-dev qtbase5-private-dev qtpositioning5-dev qttools5-dev qttools5-dev-tools saga sip-tools spawn-fcgi xauth xfonts-100dpi xfonts-75dpi xfonts-base xfonts-scalable xvfb

(从 debian/ 中的 control.in 文件中提取)

有关当前支持的发行版,请参阅 debian-ubuntu(例如,普通 xenial 的 GDAL 太旧了,我们使用 ubuntugis 的 GDAL2 构建)。

要构建 QGIS 服务器登录页面/目录 webapp,需要额外的依赖项:

  • Node.js(当前推荐 LTS):https://nodejs.org/en/download/
  • 纱线包管理器:https://yarnpkg.com/getting-started/install

此外,需要打开 cmake 标志 WITH_SERVER_LANDINGPAGE_WEBAPP

3.4. 设置ccache(该选项是可选的,但建议使用)

您应该设置 ccache 以减少编译时间:

cd /usr/local/bin
sudo ln -s /usr/bin/ccache gcc
sudo ln -s /usr/bin/ccache g++

或者简单地将 /usr/lib/ccache 添加到系统的 PATH 中。

3.5. 准备开发环境

按照惯例,我在 $HOME/dev/ 中完成所有开发工作,因此在这种情况下,我们将为 C++ 开发工作创建一个工作环境,如下所示:

mkdir -p ${HOME}/dev/cpp
cd ${HOME}/dev/cpp

以下所有说明都将假定此目录路径。

3.6. 下载QGIS源代码

有两种方法可以下载源代码。如果您没有 QGIS 源存储库的编辑权限,请使用匿名方法,如果您有权提交源代码更改,请使用开发人员签出。

  • 匿名下载:
cd ${HOME}/dev/cpp
git clone git://github.com/qgis/QGIS.git
  • 开发者下载
cd ${HOME}/dev/cpp
git clone git@github.com:qgis/QGIS.git

3.7. 开始编译

我将 QGIS 的开发版本编译到~/apps 目录中,以避免与 /usr 下的 Ubuntu 软件包发生冲突。 例如,通过这种方式,您可以在您的系统上使用 QGIS 的二进制包以及您的开发版本。 我建议你做类似的事情:

mkdir -p ${HOME}/apps

下面创建一个构建目录,并运行ccmake:

cd QGIS
mkdir build-master
cd build-master
ccmake ..

当您运行 ccmake(注意 … 是必需的!)时,将出现一个菜单,您可以在其中配置构建的各个方面:

  • 如果您希望 QGIS 具有调试功能,请将 CMAKE_BUILD_TYPE设置为 Debug

  • 如果您没有 root 访问权限或不想覆盖现有的 QGIS 安装(例如通过您的包管理器),请将 CMAKE_INSTALL_PREFIX 设置为您有权写入的位置(例如 ${HOME}/apps)。

现在按“c”进行配置,“e”关闭可能出现的任何错误消息。和 ‘g’ 生成 make 文件。请注意,有时需要按几次 ‘c’ 才能使用 ‘g’ 选项。 'g’生成完成后,按’q’退出ccmake交互对话框。

警告:确保在输入命令时构建目录完全为空。永远不要尝试“重用”现有的 Qt5 构建目录。如果您想使用ccmake或其他交互工具,请在开始使用交互工具之前在空的 build 目录中运行一次命令。

现在开始构建:

make -jX

其中 X 是可用内核的数量。 根据您的平台,这可以大大加快构建时间。

然后可以直接从构建目录运行:

./output/bin/qgis

也可以按照到您的系统:

make install

之后,可以尝试运行QGIS:

$HOME/apps/bin/qgis

如果一切正常,QGIS 应用程序应该会启动并出现在您的屏幕上。 如果您收到错误消息“加载共享库时出错”,请在您的 shell 中执行此命令。

sudo ldconfig

如果这无助于将安装路径添加到 LD_LIBRARY_PATH:

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:${HOME}/apps/lib/

或者,如果您已经知道自定义构建中需要哪些方面,则可以通过对每个方面使用 cmake -D 选项来跳过交互式 ccmake … 部分,例如:

cmake -D CMAKE_BUILD_TYPE=Debug -D CMAKE_INSTALL_PREFIX=${HOME}/apps ..

此外,如果您想加快构建时间,您可以使用 ninja 轻松完成,这是使用类似构建选项的替代方法。

例如,要配置您的构建,您可以执行以下任一操作:

ccmake -G Ninja ..
cmake -G Ninja -D CMAKE_BUILD_TYPE=Debug -D CMAKE_INSTALL_PREFIX=${HOME}/apps ..

使用ninja构建和安装:

ninja  # (uses all cores by default; also supports the above described -jX option)
ninja install

为了更快地构建,您可以只构建您需要使用的目标,例如:

ninja qgis
ninja pycore
# if it's on desktop related code only:
ninja qgis_desktop

3.8. 编译三维模块

在cmake中,您需要启用:

WITH_3D=True

3.8.1. 在基于 Debian 的发行版上使用 3D 编译

QGIS 3D 需要 Qt53DExtras。 这些标头已从基于 Debian 的发行版的 Qt 上游版本中删除。 已在 external/qt3dextra-headers 中的 QGIS 存储库中制作了副本。 要在启用 3D 的情况下进行编译,您需要添加一些 cmake 选项:

CMAKE_PREFIX_PATH={path to QGIS Git repo}/external/qt3dextra-headers/cmake
QT5_3DEXTRA_INCLUDE_DIR={path to QGIS Git repo}/external/qt3dextra-headers
QT5_3DEXTRA_LIBRARY=/usr/lib/x86_64-linux-gnu/libQt53DExtras.so
Qt53DExtras_DIR={path to QGIS Git repo}/external/qt3dextra-headers/cmake/Qt53DExtras

3.9. 构建不同的分支

通过使用 git worktree,您可以基于相同的 Git 配置在不同的分支之间切换以并行使用多个源。 我们建议您阅读有关此 Git 命令的文档:

git commit
git worktree add ../my_new_functionality
cd ../my_new_functionality
git fetch qgis/master
git rebase -i qgis/master
\# only keep the commits to be pushed
git push -u my_own_repo my_new_functionality

3.10.构建 Debian 软件包

您也可以创建Debian 软件包,而不是像上一步那样创建个人安装。 这是从 QGIS 根目录开始完成的,您将在其中找到一个 debian 目录。

首先你需要安装一次debian打包工具:

apt-get install build-essential

同时,您需要为您的发行版创建一个变更日志条目。 例如对于 Ubuntu Precise:

dch -l ~precise --force-distribution --distribution precise "precise build"

QGIS 包将使用以下内容创建:

dpkg-buildpackage -us -uc -b

注意:需要安装 devscripts 以获取 dch

注意:如果 dpkg-buildpackage未找到需要的构建依赖项,您可以使用 apt-get 安装它们并重新运行该命令。

注意:如果您安装了 libqgis1-dev,则需要先使用 dpkg -r libqgis1-dev 将其删除。 否则 dpkg-buildpackage 将出现构建冲突。

注意:默认情况下,测试在构建过程中运行,其结果会上传到 https://cdash.orfeo-toolbox.org/index.php?project=QGIS。 您可以在构建命令前使用 DEB_BUILD_OPTIONS=nocheck 关闭测试。 使用 DEB_TEST_TARGET=test 可以避免上传结果。

软件包将在父目录(即上一级目录)中创建。 可以使用 dpkg 安装它们。 例如。:

sudo debi

3.11. 在Fedora Linux上构建

我们假设您已经准备好 QGIS 的源代码,并在其中创建了一个名为 buildbuild-qt5的新子目录。

3.11.1. 安装构建依赖项

发行版本依赖包安装命令
Fedora 35 Workstationdnf install qt5-qtbase-private-devel qt5-qtwebkit-devel qt5-qtlocation-devel qt5-qttools-static qca-qt5-devel qca-qt5-ossl qt5-qt3d-devel python3-qt5-devel python3-qscintilla-qt5-devel qscintilla-qt5-devel python3-qscintilla-qt5 clang flex bison geos-devel gdal-devel sqlite-devel libspatialite-devel qt5-qtsvg-devel spatialindex-devel expat-devel proj-devel qwt-qt5-devel gsl-devel postgresql-devel cmake python3-future gdal-python3 python3-psycopg2 python3-PyYAML python3-pygments python3-jinja2 python3-OWSLib qca-qt5-ossl qwt-qt5-devel qtkeychain-qt5-devel qwt-devel libzip-devel exiv2-devel python3-sip-devel protobuf-lite protobuf-lite-devel libzstd-devel qt5-qtserialport-devel
older versionsdnf install qt5-qtbase-private-devel qt5-qtwebkit-devel qt5-qtlocation-devel qt5-qttools-static qca-qt5-devel qca-qt5-ossl qt5-qt3d-devel python3-qt5-devel python3-qscintilla-qt5-devel qscintilla-qt5-devel python3-qscintilla-devel python3-qscintilla-qt5 clang flex bison geos-devel gdal-devel sqlite-devel libspatialite-devel qt5-qtsvg-devel spatialindex-devel expat-devel proj-devel qwt-qt5-devel gsl-devel postgresql-devel cmake python3-future gdal-python3 python3-psycopg2 python3-PyYAML python3-pygments python3-jinja2 python3-OWSLib qca-qt5-ossl qwt-qt5-devel qtkeychain-qt5-devel qwt-devel sip-devel libzip-devel exiv2-devel

要构建 QGIS 服务器,需要额外的依赖项:

dnf install fcgi-devel

对于构建 QGIS 服务器登录页面/目录 webapp:

dnf install nodejs yarnpkg

此外,需要打开 cmake 标志 WITH_SERVER_LANDINGPAGE_WEBAPP

输入以下命令时,请确保您的构建目录完全为空。 永远不要尝试“重用”现有的 Qt5 构建目录。 如果要使用 ccmake 或其他交互工具,请在开始使用交互工具之前在空的 build 目录中运行一次以下命令。

cmake ..

如果一切顺利,您终于可以开始编译了。 (像往常一样附加一个 -jX ,其中 X 是可用核心数选项,以加快构建过程)

make

从构建目录运行:

./output/bin/qgis

或安装到您的系统:

make install

3.11.2. 建议的系统调整

默认情况下,Fedora 禁用来自 Qt 应用程序的调试调用。 这可以防止运行单元测试时通常打印的有用调试输出。

要为当前用户启用调试打印,请执行:

cat > ~/.config/QtProject/qtlogging.ini << EOL
[Rules]
default.debug=true
EOL

4. 在Windows平台上构建

4.1. 使用 Microsoft Visual Studio 构建

本节介绍如何在 Windows 上使用 Visual Studio (MSVC) 2015 构建 QGIS。 这也是目前二进制 QGIS 包的制作方式(早期版本使用 MinGW)。

本节介绍允许使用 Visual Studio 构建 QGIS 所需的设置。

4.1.1. Visual Studio 2015 社区版

下载免费(如免费啤酒)的社区安装程序。

选择“自定义”安装并添加以下软件包:

  • “Visual C++”下的“Visual C++ 2015 常用工具”
  • “通用 Windows 应用程序开发工具”下的“工具 (1.4.1) 和 Windows 10 SDK (10.0.14393)”。

4.1.2. 其他工具和依赖项

下载和安装下面的软件包:

  • CMake
  • cygwin 32 位或 64 位
  • GNU flex、GNU bison 和 GIT
  • OSGeo4W 32 位或 64 位
  • ninja:将 ninja.exe 复制到 C:\OSGeo4W64\bin\

对于 QGIS 构建,您需要从 cygwin 安装以下软件包:

  • bison
  • flex
  • git (即使已经安装了Windows版本的Git,也需要安装git)

对于 OSGeo4W,选择高级安装:

  • qgis-dev-deps

    • 这还将选择上述软件包所依赖的软件包。

    • 注意:如果您安装其他软件包,这可能会导致问题。 特别是,请确保不要安装 msinttypes 包。 它在 OSGeo4W[64]\include 中安装了一个 stdint.h 文件,该文件与 Visual Studio 自己的 stdint.h 冲突,例如破坏了虚拟层提供程序的构建。

本文档的早期版本还介绍了如何构建上述所有依赖项。 如果您对此感兴趣,请查看 Wiki 或 SVN 存储库中此页面的历史记录。

4.1.3. 克隆 QGIS 源代码

选择一个目录来存储 QGIS 源代码。 例如,要将其放入 OSGeo4W64 安装中,请在此处导航:

cd C:\OSGeo4W64

后面的所有指令都将假定此目录。

在命令提示符下,将 QGIS 源代码从 git 克隆到源目录 QGIS

git clone git://github.com/qgis/QGIS.git

这需要 Git。 如果您的 PATH 上已经有 Git for Windows,您可以从普通的命令提示符处执行此操作。 如果不这样做,您可以通过打开 Cygwin[64] 终端来使用作为 Cygwin 的一部分安装的 Git 包

并且,为了避免 Windows 中的 Git 报告对未实际修改的文件的更改:

cd QGIS
git config core.filemode false

4.1.4. 从命令行使用 CMake 配置和构建

注意:以本节为例。 当 OSGeo4W 和 SDK 继续发展时,它往往会过时。 ms-windows/osgeo4w/package-nightly.cmd 用于夜间构建并不断更新,因此可能包含此处尚未反映的必要更新。

要使用同时具有 VC++ 和 OSGeo4W 变量的环境启动命令提示符,请创建以下批处理文件(假设上述软件包安装在默认位置):

@echo off
call C:\OSGeo4W64\QGIS\ms-windows\osgeo4w\msvc-env.bat x86_64
@cmd

将批处理文件保存为 C:\OSGeo4W64\OSGeo4W-dev.bat 并运行它。

4.1.4.1 使用 configonly.bat 创建 MSVC 解决方案文件

我们将使用文件 ms-windows/osgeo4w/configonly.bat 创建一个 MSVC 解决方案文件。 有两种CMake 生成器可用于创建解决方案文件:Ninja 和本机 MSVC。 使用本机 MSVC 解决方案的优点是您可以更轻松地找到构建问题的根源。 configonly.bat 旨在使用 MSVC 解决方案文件创建配置的构建目录:

cd C:\OSGeo4W64\QGIS\ms-windows\osgeo4w
configonly.bat
4.1.4.2 用 MSVC 编译 QGIS

我们需要在设置所有环境变量的情况下运行 MSVC,因此我们将按如下方式运行它:

  • 运行您之前创建的批处理文件 OSGeo4W-dev.bat。
  • 在命令提示符下运行call gdal-dev-env.bat 以将发行版 gdal 和 proj 库添加到您的 PATH。
  • 在命令提示符下运行 devenv 以打开 MSVC。
  • 从 MSVC,打开解决方案文件 C:\OSGeo4W64\QGIS\ms-windows\osgeo4w\build-qgis-test-x86_64\qgis.sln
  • 尝试构建解决方案(可能需要一段时间,去喝杯茶吧)。
  • 如果失败,请一次又一次地运行它,直到(希望)没有错误。

从 MSVC 中运行 QGIS:

编辑项目 ALL_BUILD 的属性以包含可执行文件的路径:

【调试】 -> 【命令】 -> C:\OSGeo4W64\QGIS\ms-windows\osgeo4w\build-qgis-test-x86_64\output\bin\RelWithDebInfo\qgis.exe

要运行,请使用菜单命令:【Debug】 -> 【Start Debugging (F5) 】或 【Start without Debugging (Ctrl+F5)】。

忽略“这些项目已过期”消息,即使没有更改文件也会出现。

4.1.5 使用 cmake-gui 可能仍然有效的旧替代方法

在某处创建一个“build”目录。这将是生成所有构建输出的地方。

现在运行 cmake-gui(仍然来自 cmd)并在 Where is the source code: 框中,浏览到顶级 QGIS 目录。

在 Where to build the binaries: 框中,浏览到您创建的build目录。

如果 bison 和 flex 的路径包含空格,则需要使用目录的简称(即 C:\Program Files 应改写为 C:\Progra~n,其中 ndir /x C:\ 中所示的数字)。

验证是否未选中 BINDINGS_GLOBAL_INSTALL 选项,以便在运行 INSTALL 目标时将 python 绑定放置到输出目录中。

点击configure以开始配置,并选择 Visual Studio 9 2008 并保留native compilers(本机编译器)并单击Finish(完成)。

配置应该在没有任何其他问题的情况下完成,并允许您单击Generate(生成)。

现在关闭 cmake-gui 并通过启动 vcexpress,在命令提示符下继续。使用 File / Open / Project/Solutions 并打开项目目录中的 qgis-x.y.z.sln 文件。

在使用 ALL_BUILD 目标构建 QGIS 之前,将Solution Configureation解决方案配置从Debug调试更改为 RelWithDebInfo(带有调试信息的发布)或Release(不需要包含调试库)。

构建完成后,您应该使用 INSTALL 目标安装 QGIS。

通过构建INSTALL项目来安装 QGIS。默认情况下,这将安装到 C:\Program Files\qgis<version> (可以通过更改 cmake-gui 中的 CMAKE_INSTALL_PREFIX 变量来更改)。

您还需要将所有依赖 DLL 添加到 QGIS 安装目录或将它们各自的目录添加到您的 PATH环境变量。

4.1.6. 打包

要创建独立安装程序,在 qgis/ms-windows/osgeo4w 中有一个名为 creatensis.pl 的 perl 脚本。 它从 OSGeo4W 下载所有必需的包,并使用 NSIS 将它们重新打包到安装程序中。

该脚本可以在 Windows 和 Linux 上运行。

在 Debian/Ubuntu 上,你可以只安装 nsis 包。

NSIS for Windows 可以在以下位置下载:

https://nsis.sourceforge.io/Main_Page

Perl for Windows(包括 wgetunziptarbzip2 等其他要求)可在以下位置获得:

https://cygwin.com

4.1.7. 打包你自己构建的 QGIS

假设你已经完成了上述打包步骤,如果你想包含你自己手工构建的 QGIS 可执行文件,你需要将它们从你的 windows 安装复制到由 creatensis 脚本创建的 ms-windows 文件树中。

cd ms-windows/
rm -rf osgeo4w/unpacked/apps/qgis/*
cp -r /tmp/qgis1.7.0/* osgeo4w/unpacked/apps/qgis/

现在可以创建软件包:

./quickpackage.sh

在此之后,您现在应该有一个 nsis 安装程序,其中包含您自己构建的 QGIS 以及在 Windows 机器上运行它所需的所有依赖项。

4.1.8. Osgeo4w 打包

实际的打包过程目前没有记录,现在请查看 ms-windows/osgeo4w/package.cmd

4.2. 使用 mingw64 在 Linux 上构建

通过这种方法,您可以在 Docker 容器中使用 mingw64 在 Linux 上交叉构建 Windows 二进制文件。

要从 QGIS 源目录在 Linux 上构建,请启动:

ms-windows/mingw/build.sh

成功构建后,您将在 QGIS 源目录中找到两个包:

  • qgis-portable-win64.zip (QGIS Windows 64位)
  • qgis-portable-win64-debugsym.zip(调试符号)

此方法也用于持续集成过程。 在每次拉取请求之后,上述两个包都存储为 GitHub 操作工件,可供下载,从而可以在 Windows 上快速测试更改。

4.2.1. 使用 Docker 构建

这是最简单的方法,但您需要在系统上安装 Docker。

您可以通过从 QGIS 存储库的根目录调用脚本 ms-windows/mxe/build.sh 使用 Docker 映像来交叉构建 QGIS。

=== 不使用 Docker 构建 ====

这需要在您的系统上安装 mxe 工具链并自己构建所有依赖项。

4.2.1.1. 初始设置

请按照 mxe 网站上的说明设置您的构建工具链 http://mxe.cc/,记下您安装 mxe 的路径。

4.2.1.2. 构建依赖项

请参阅 ms-windows/mxe 下的 README.md 以获取详细说明以及在尝试构建 QGIS 之前需要在 mxe 中构建的依赖项列表。

4.2.1.3. 交叉构建 QGIS

编辑 build-mxe.sh 脚本,并选择调整 mxe 安装所在的路径,您还可以更改构建和发布目录。

4.2.2. 测试 QGIS

复制在Windows 机器上构建生成的包,并解压缩,然后启动 qgis 二进制文件。该过程无需安装。

5. 在MacOS X平台上构建

如果你想测试 QGIS,最简单的选择是直接从

https://qgis.org/downloads/macos

下载和安装一体化、自包含的软件包(bundle)。

另一方面,如果您想自己构建或开发 QGIS,则需要一组依赖项和工具。 下面网址说明了使用一体化 QGIS 软件包需要的依赖项,但您也可以使用 Homebrew、MacPorts 或 Conda 依赖项构建 QGIS。

https://github.com/qgis/QGIS-Mac-Packager

这包括在安装了最近更新的最新 Mac OS X 上构建的注释。 该构建使用 clang 编译器。

并行编译:在多处理器/多核 Mac 上,可以加快编译速度,但这不是自动的。 每当您键入“make”(但不是“make install”)时,请键入:

make -j [#cpus]

将 [#cpus] 替换为您的 Mac 拥有的内核和/或处理器的数量。 要了解您有多少 CPU 可用,请在终端中运行以下命令:

/usr/sbin/sysctl -n hw.ncpu

5.1. 安装开发者工具

开发人员工具不是标准 OS X 安装的一部分。 至少您需要命令行工具:

sudo xcode-select --install

但也建议从 App Store 安装 Xcode。

5.2. 安装CMake和其他构建工具

例如,安装Homebrew

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"

以及以下开发/构建工具

brew install git cmake ninja pkg-config wget bash-completion curl gnu-sed coreutils ccache libtool astyle help2man autoconf automake pandoc

如果您从 MacPorts 或 Conda 安装了这些工具也可以,我们需要能够在以下步骤中从终端运行 cmake 和其他工具。

5.3. 安装 Qt5 和 QGIS-Deps

要构建 QGIS,我们手头需要 Qt5 和 FOSS 依赖项。 理想情况下,Qt5 版本应该与用于构建依赖包的版本匹配。

从以下位置下载最新的 QGIS-Deps 安装脚本、qt 包和 QGIS-Deps 包

https://qgis.org/downloads/macos/deps

您的下载文件夹中应该有一个 bash 脚本和两个 tar 归档文件。 运行安装脚本将 Qt 和 QGIS-Deps 安装到 /opt/ 区域。 您需要 root 权限或对/opt/Qt/opt/QGIS具有写入权限。

或者,您可以从以下位置下载并安装 Qt Open Source for MacOS

https://www.qt.io/

与安装脚本中引用的版本相同。 它必须安装在 /opt/Qt

请注意,QGIS-Deps 包尚未签名,因此您可能需要将终端添加到 System Preferences -> Security & Privacy -> Privacy -> Developer Tools 或在系统询问时手动接受库的使用。

5.4. QGIS源码

将 QGIS 源解压缩到您选择的工作文件夹。 如果您是从源代码中阅读此内容,那么您已经完成了此操作。

如果你想体验最新的开发源码,请到 github QGIS 项目页面:

http://github.com/qgis/QGIS

它应该默认为 master 分支。 单击下载按钮并选择下载 .tar.gz。 双击 tarball 将其解压缩。

或者,使用 git 并通过以下方式克隆存储库

git clone git://github.com/qgis/QGIS.git

5.5. 配置构建

CMake 支持源代码外构建,因此我们将为构建过程创建一个“build”目录。 OS X 使用 ${HOME}/Applications 作为标准用户应用程序文件夹(这将指定系统应用程序文件夹图标)。 如果您拥有正确的权限,您可能希望直接构建到您的 /Applications 文件夹中。 下面的说明假设您正在构建 ${HOME}/Applications 目录。

在终端 cd 到先前下载的 qgis 源文件夹,然后:

cd ..
mkdir build
cd build

QGIS_DEPS_VERSION=0.9;\
QT_VERSION=5.15.2;\
PATH=/opt/QGIS/qgis-deps-${QGIS_DEPS_VERSION}/stage/bin:$PATH;\
cmake \
 -DCMAKE_INSTALL_PREFIX=~/Applications \
 -DCMAKE_BUILD_TYPE=Release \
 -DQGIS_MAC_DEPS_DIR=/opt/QGIS/qgis-deps-${QGIS_DEPS_VERSION}/stage \
 -DCMAKE_PREFIX_PATH=/opt/Qt/${QT_VERSION}/clang_64 \
 ../QGIS

注意:不要忘记最后一行的../QGIS,它告诉 CMake 查找源文件。

注意:仔细检查屏幕输出,所有库都是从 QGIS-Deps /opt/QGIS 中挑选的,而不是从系统 /usr/lib 或 Homebrew 的 /usr/local/ 或系统框架 /Library/Frameworks/ 中挑选的。 尤其要检查 Proj、GDAL、sqlite3 和 Python 路径。

初始终端配置后,您可以使用 ccmake 进行进一步的更改:

cd build
ccmake ../QGIS

5.6. 构建

现在我们可以开始构建过程了(记住一开始的并行编译说明,这是一个使用它的好地方,如果可以的话):

make -j [#cpus]

现在您可以通过 ./output/bin/QGIS.app/Contents/MacOS/QGIS 从构建目录运行 QGIS。如果所有构建都没有错误,则可以安装它:

make install

或者,对于 /Applications 构建:

sudo make install

要运行已安装的 QGIS,您需要将依赖项保留在/opt/文件夹中。 如果您想创建没有这些依赖项的包,请阅读项目中的下列文档:

https://github.com/qgis/QGIS-Mac-Packager

6. 在 GNU/Linux 上设置 WCS 测试服务器

要求:Ubuntu / Debian 衍生发行版

这些注释适用于 Ubuntu,其他版本和 Debian 衍生发行版可能需要包名称略有不同。

6.1. 准备

请注意,一旦将这项工作集成到 master 中,下面的 git 存储库将更改为默认的 QGIS 存储库。

git remote add blazek git://github.com/blazek/Quantum-GIS.git
git fetch blazek
git branch --track wcs2 blazek/wcs2
git checkout wcs2
cd /var/www/
sudo mkdir wcs
sudo chown timlinux wcs
cd wcs/
mkdir cgi-bin
cd cgi-bin/

6.2.安装mapserver

sudo apt-get install cgi-mapserver

设置/var/www/wcs/cgi-bin/wcstest-1.9.0的内容为:

#! /bin/sh
MS_MAPFILE=/var/www/wcs/testdata/qgis-1.9.0/raster/wcs.map
export MS_MAPFILE
/usr/lib/cgi-bin/mapserv

然后:

chmod +x var/www/wcs/cgi-bin/wcstest-1.9.0
mkdir -p /var/www/wcs/testdata/qgis-1.9.0/raster/
cd /var/www/wcs/testdata/qgis-1.9.0/raster/
cp -r /home/timlinux/QGIS/tests/testdata/raster/* .

编辑/var/www/wcs/testdata/qgis-1.9.0/raster/wcs.map,设置shapepath为:

SHAPEPATH "/var/www/wcs/testdata/qgis-1.9.0/raster"

然后,创建/var/www/wcs/7-wcs.example.com.conf,设置其内容为:

VirtualHost*:80>
ServerName wcs.example.com
ServerAdmin wcs-admin@example.com

LogLevel warn
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" \"%{forensic-id}n\"" combined
CustomLog /var/log/apache2/wcs_example.com/access.log combined
ErrorLog /var/log/apache2/wcs_example.com/error.log

DocumentRoot /var/www/wcs/html

ScriptAlias /cgi-bin/ /var/www/wcs/cgi-bin/
<Directory "/var/www/wcs/cgi-bin">
 	AllowOverride None
	Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
	Order allow,deny
	Allow from all
</Directory>

RewriteEngine on
RewriteRule /1.9.0/wcs /cgi-bin/wcstest-1.9.0 [PT]

</VirtualHost>

6.3.创建主页

mkdir html
vim html/index.html

设置内容为:

This is the test platform for QGIS' wcs client. You can use these services
from QGIS directly (to try out WCS for example) by pointing your QGIS to:
http://wcs.example.com/1.9.0/wcs

6.4.部署

sudo mkdir /var/log/apache2/wcs_example.com
sudo chown www-data /var/log/apache2/wcs_example.com
cd /etc/apache2/sites-available/
sudo ln -s /var/www/wcs/7-wcs.example.com.conf .
cd /var/www/wcs/
sudo a2ensite 7-wcs.example.com.conf
sudo /etc/init.d/apache2 reload

6.5.调试

sudo tail -f /var/log/apache2/wcs_example.com/error.log

7. 设置 Jenkins 构建服务器

假设:您知道如何制作一个工作的构建环境,并希望现在将其部署在 Jenkins 下进行持续集成测试。

这些注释很简洁,稍后我将在需要时对其进行扩展。

步骤如下:

  • 安装 Jenkins 并根据自己的喜好进行配置

  • 确保你安装了 git、github、junit 等插件。我已安装的插件的完整列表如下(请注意,您几乎肯定不需要此处列出的每个插件):

    • External Monitor Job Type Plugin

    • LDAP Plugin

    • pam-auth

    • javadoc

    • ant

    • Jenkins Subversion Plug-in

    • Git Plugin

    • Maven 2 Project Plugin

    • Jenkins SLOCCount Plug-in

    • Jenkins Sounds plugin

    • Jenkins Translation Assistance plugin

    • ruby-runtime

    • Jenkins CVS Plug-in

    • Coverage/Complexity Scatter Plot PlugIn

    • Status Monitor Plugin

    • Git Parameter Plug-In

    • github-api

    • GitHub plugin

    • Jenkins Violations plugin

    • git-notes Plugin

    • Twitter plugin

    • Jenkins Cobertura Plugin

    • Jenkins Gravatar plugin

    • Jenkins SSH Slaves plugin

  • 创建一个名为“QGIS”的任务

  • 对该任务使用以下选项:

    • 任务名称:QGIS

    • 任务类型:构建一个自由风格的软件项目

    • 勾选启用基于项目的安全性(您需要在其他地方根据项目设置配置您的 Jenkins 安全性)

    • 允许匿名用户读取和发现访问

    • 将github项目设置为https://github.com/qgis/QGIS/

    • 将源代码管理设置为 Git

    • 将存储库 url 设置为 git://github.com/qgis/QGIS.git

    • 在高级存储库 url 设置中,将 refspec 设置为 +refs/heads/master:refs/remotes/origin/master

    • 将要构建的分支设置为 master

    • 存储库浏览器:自动

    • 构建触发器:设置为 Poll SCM 并将计划设置为 *****(每分钟轮询)

    • 构建 - 执行 shell 并将 shell 脚本设置为:

cd build
cmake ..
xvfb-run --auto-servernum --server-num=1 \
  --server-args="-screen 0 1024x768x24" \
  make Experimental || true
if [ -f Testing/TAG ] ; then
  xsltproc ../tests/ctest2junix.xsl \
    Testing/`head -n 1 < Testing/TAG`/Test.xml > \
    CTestResults.xml
fi
  • 添加 Junit 构建后操作并将“发布 Junit 测试结果报告”设置为:build/CTestResults.xml
  • 电子邮件通知:向修改构建的个人发送单独的电子邮件
  • Jenkins 声音 - 为失败、成功和不稳定设置声音。
  • 保存

现在打开 Job 仪表板并将某些内容推送到 QGIS 并等待一分钟以验证自动构建工作。

注意:您需要登录 Jenkins 用户帐户并转到 /var/lib/jenkins/jobs/QGIS/workspace,然后创建一个build目录并运行初始的 cmake 设置,然后进行测试构建。 此过程与本文档其他地方描述的相同。

下面这篇不错的博客文章中列出了一些设置:

http://alexott.blogspot.com/2012/03/jenkins-cmakectest.html

8. 调试输出和运行测试

如果您有兴趣查看嵌入式调试输出,请更改以下 CMake 选项:

-D CMAKE_BUILD_TYPE=DEBUG # (or RELWITHDEBINFO)

这将使您的终端或系统日志充满来自源代码中 QgsDebugMsg() 调用的大量有用输出。

如果您想运行测试套件,则需要从构建目录执行此操作,因为它不适用于已安装/捆绑的应用程序。 首先设置 CMake 选项以启用测试:

-D ENABLE_TESTS=TRUE

然后,从构建目录运行测试:

cd build
make test

要运行测试,并向http://cdash.orfeo-toolbox.org/index.php?project=QGIS报告:

cd build
make Experimental

您可以通过设置 CMake 选项来定义通过“make Experimental”报告的主机名:

-D SITE="my.domain.org"

要运行特定的测试(参见“man ctest”):

cd build
# show listing of tests, without running them
ctest --show-only

# run specific C++ or Python test(s) matching a regular expression
ctest --verbose --tests-regex SomeTestName

9. 作者和致谢

以下人员为本文档做出了贡献:

  • Windows MINGW 部分

  • Tim Sutton(蒂姆·萨顿),Godofredo Contreras(戈多弗雷多·孔特雷拉斯) 2006

  • CMake 附加部分: Magnus Homann 2007

  • Python 附加部分: Martin Dobias 2007

  • 感谢 Tisham Dhar 准备初始的 msys 环境

  • Windows MSVC 部分(详细安装)

    • David Willis(大卫威利斯) 2007

    • MSVC 安装附加部分: Tim Sutton 2007

    • PostgreSQL、Qt 编译、SIP、Python、AutoExp 附加部分: Juergen Fischer 2007

  • Windows MSVC 部分(简化安装)

    • Tim Sutton(蒂姆·萨顿) 2007

    • Juergen Fischer(于尔根·费舍尔) 2007

    • Florian Hillen(弗洛里安·希伦) 2010

  • OSX部分

    • Tim Sutton(蒂姆·萨顿) 2007

    • 特别感谢 Tom Elwertowski 和 William Kyngesburye

    • Larry Shaffer(拉里·谢弗) 2012

    • Peter Petrik(彼得·彼得里克) 2020

  • GNU/Linux 部分

    • Tim Sutton(蒂姆·萨顿) 2006

    • Debian 软件包部分:Juergen Fischer 2008

  • WCS 测试服务器部分

    • Tim Sutton(蒂姆·萨顿),Radim Blazek 2012
  • Jenkins CI 配置

  • Tim Sutton(蒂姆·萨顿) 2012

  • Latex生成

    • Tim Sutton(蒂姆·萨顿) 2011
  • 调试输出/测试部分

    • Larry Shaffer(拉里谢弗) 2012,“星期五测试”:Tim Sutton(蒂姆·萨顿)
  • MXE/Mingw64 部分

    • Alessandro Pasotti(亚历山德罗·帕索蒂)(2018-2021)
  • 0
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
QGIS是一个开源的地理信息系统软件,可以用于构建和管理地理空间数据。通过使用QGIS,我们可以很容易地进行数据收集。 首先,我们需要创建一个新的项目。在QGIS中,我们可以通过选择菜单栏上的“项目”选项来创建一个新项目。然后,我们可以选择一个适当的坐标参考系统和投影,以确保我们的数据与地图背景相匹配。 然后,我们可以添加图层来表示我们要收集数据的特定地理空间区域。这些图层可以是矢量图层或栅格图层,具体取决于我们要收集的数据类型。我们可以从现有的数据源中导入图层,例如Shapefile、GeoJSON或CSV文件,也可以通过手动绘制图层来创建新的要素。 一旦我们有了表示要收集数据的图层,我们可以使用QGIS的编辑工具来创建、修改和删除要素。例如,我们可以使用点工具来在地图上添加新的点要素,使用线工具来绘制道路或管道,或使用多边形工具来创建土地用途边界。 在收集数据时,我们可以使用属性表来输入要素的属性信息。在QGIS中,我们可以打开属性表并为每个要素输入属性值。这些属性可以是文本、数字、日期等类型。 一旦我们完成了数据收集,我们可以保存项目并以各种格式导出数据。QGIS支持多种导出格式,包括Shapefile、GeoJSON、CSV、KML等。 总的来说,使用QGIS构建简单的数据收集是非常简单和直观的。它提供了丰富的地理信息系统功能,可以满足各种数据收集需求,并且可以与其他GIS软件和工具集成,为我们的工作提供更多的灵活性和扩展性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值