赞
踩
本文档是描述QGIS软件原始安装的指南。本文档中提到的软件和硬件在大多数情况下涉及到注册商标,因此受法律要求的约束。 QGIS 使用 GNU 通用公共许可证。更多信息可以在 QGIS 主页(https://qgis.org)上查找。
本文档中提供的详细信息已根据编辑的知识和责任进行了验证。然而,关于内容的错误在所难免。因此,所有数据均不承担任何责任或保证。编辑和出版商不对可能的失败及其后果承担任何责任或义务。随时欢迎您指出可能的错误。
由于 QGIS 的代码从发布不断演化,这些说明会定期更新以匹配相应的发布。当前主分支的说明可在 https://github.com/qgis/QGIS/blob/master/INSTALL.md 获得。如果您希望构建另一个版本的 QGIS,请确保签出相应的发布分支。 QGIS 源代码可以在Github存储库中找到。
请访问 https://qgis.org 以了解有关加入我们的邮件列表和进一步参与该项目的信息。
文档作者注意事项:请将此文档用作描述构建过程的主要参考资料。请不要删除此注意事项。
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格式列表。
要求:Ubuntu / Debian 衍生发行版
注意:有关构建 Debian 软件包的信息,请参阅构建 Debian 软件包部分。 除非您打算在 QGIS 上进行开发,否则这可能是编译和安装 QGIS 最简单的选择。
这些注释适用于 Ubuntu,其他版本和 Debian衍生发行版可能需要的包名称略有不同。
这些说明适用于从源代码构建 QGIS。这里的主要目标之一是,展示如何使用二进制依赖从源代码构建核心QGIS的内容。我更喜欢这种方法,因为这意味着我们可以将管理系统包的业务留给 apt,只关心编码QGIS!
本文档假定您已进行全新安装并拥有“干净”的系统。 如果这是一个已经使用了一段时间的系统,这些说明应该可以正常工作,您可能需要跳过那些与您无关的步骤。
构建QGIS 依赖的包在 Ubuntu 的“universe”组件中可用。这个默认是不激活的,所以你需要激活它:
a) 编辑您的/etc/apt/sources.list
文件。
b) 取消注释所有以“deb”开头的行
此外,您将需要足够新的发行版才能满足所有依赖项。 下面将列出支持的发行版。
现在更新您的本地资源数据库:
sudo apt-get update
发行版本 | 依赖包安装命令 | |
---|---|---|
buster | apt-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 | |
bullseye | apt-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 | |
bionic | apt-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 | |
focal | apt-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 | |
groovy | apt-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 | |
hirsute | apt-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 | |
impish | apt-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 | |
sid | apt-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,需要额外的依赖项:
此外,需要打开 cmake 标志 WITH_SERVER_LANDINGPAGE_WEBAPP
。
您应该设置 ccache 以减少编译时间:
cd /usr/local/bin
sudo ln -s /usr/bin/ccache gcc
sudo ln -s /usr/bin/ccache g++
或者简单地将 /usr/lib/ccache
添加到系统的 PATH
中。
按照惯例,我在 $HOME/dev/ 中完成所有开发工作,因此在这种情况下,我们将为 C++ 开发工作创建一个工作环境,如下所示:
mkdir -p ${HOME}/dev/cpp
cd ${HOME}/dev/cpp
以下所有说明都将假定此目录路径。
有两种方法可以下载源代码。如果您没有 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
我将 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
在cmake中,您需要启用:
WITH_3D=True
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
通过使用 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
您也可以创建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
我们假设您已经准备好 QGIS 的源代码,并在其中创建了一个名为 build
或build-qt5
的新子目录。
发行版本 | 依赖包安装命令 |
---|---|
Fedora 35 Workstation | dnf 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 versions | dnf 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
默认情况下,Fedora 禁用来自 Qt 应用程序的调试调用。 这可以防止运行单元测试时通常打印的有用调试输出。
要为当前用户启用调试打印,请执行:
cat > ~/.config/QtProject/qtlogging.ini << EOL
[Rules]
default.debug=true
EOL
本节介绍如何在 Windows 上使用 Visual Studio (MSVC) 2015 构建 QGIS。 这也是目前二进制 QGIS 包的制作方式(早期版本使用 MinGW)。
本节介绍允许使用 Visual Studio 构建 QGIS 所需的设置。
下载免费(如免费啤酒)的社区安装程序。
选择“自定义”安装并添加以下软件包:
下载和安装下面的软件包:
ninja.exe
复制到 C:\OSGeo4W64\bin\
对于 QGIS 构建,您需要从 cygwin 安装以下软件包:
对于 OSGeo4W,选择高级安装:
qgis-dev-deps
这还将选择上述软件包所依赖的软件包。
注意:如果您安装其他软件包,这可能会导致问题。 特别是,请确保不要安装 msinttypes 包。 它在 OSGeo4W[64]\include 中安装了一个 stdint.h 文件,该文件与 Visual Studio 自己的 stdint.h 冲突,例如破坏了虚拟层提供程序的构建。
本文档的早期版本还介绍了如何构建上述所有依赖项。 如果您对此感兴趣,请查看 Wiki 或 SVN 存储库中此页面的历史记录。
选择一个目录来存储 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
注意:以本节为例。 当 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
并运行它。
我们将使用文件 ms-windows/osgeo4w/configonly.bat
创建一个 MSVC 解决方案文件。 有两种CMake 生成器可用于创建解决方案文件:Ninja 和本机 MSVC。 使用本机 MSVC 解决方案的优点是您可以更轻松地找到构建问题的根源。 configonly.bat 旨在使用 MSVC 解决方案文件创建配置的构建目录:
cd C:\OSGeo4W64\QGIS\ms-windows\osgeo4w
configonly.bat
我们需要在设置所有环境变量的情况下运行 MSVC,因此我们将按如下方式运行它:
call gdal-dev-env.bat
以将发行版 gdal 和 proj 库添加到您的 PATH。 devenv
以打开 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)】。
忽略“这些项目已过期”消息,即使没有更改文件也会出现。
在某处创建一个“build”目录。这将是生成所有构建输出的地方。
现在运行 cmake-gui
(仍然来自 cmd
)并在 Where is the source code: 框中,浏览到顶级 QGIS 目录。
在 Where to build the binaries: 框中,浏览到您创建的build
目录。
如果 bison 和 flex 的路径包含空格,则需要使用目录的简称(即 C:\Program Files
应改写为 C:\Progra~n
,其中 n
为 dir /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
环境变量。
要创建独立安装程序,在 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(包括 wget
、unzip
、tar
和 bzip2
等其他要求)可在以下位置获得:
https://cygwin.com
假设你已经完成了上述打包步骤,如果你想包含你自己手工构建的 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 机器上运行它所需的所有依赖项。
实际的打包过程目前没有记录,现在请查看 ms-windows/osgeo4w/package.cmd
。
通过这种方法,您可以在 Docker 容器中使用 mingw64 在 Linux 上交叉构建 Windows 二进制文件。
要从 QGIS 源目录在 Linux 上构建,请启动:
ms-windows/mingw/build.sh
成功构建后,您将在 QGIS 源目录中找到两个包:
此方法也用于持续集成过程。 在每次拉取请求之后,上述两个包都存储为 GitHub 操作工件,可供下载,从而可以在 Windows 上快速测试更改。
这是最简单的方法,但您需要在系统上安装 Docker。
您可以通过从 QGIS 存储库的根目录调用脚本 ms-windows/mxe/build.sh 使用 Docker 映像来交叉构建 QGIS。
=== 不使用 Docker 构建 ====
这需要在您的系统上安装 mxe 工具链并自己构建所有依赖项。
请按照 mxe 网站上的说明设置您的构建工具链 http://mxe.cc/,记下您安装 mxe 的路径。
请参阅 ms-windows/mxe 下的 README.md 以获取详细说明以及在尝试构建 QGIS 之前需要在 mxe 中构建的依赖项列表。
编辑 build-mxe.sh 脚本,并选择调整 mxe 安装所在的路径,您还可以更改构建和发布目录。
复制在Windows 机器上构建生成的包,并解压缩,然后启动 qgis 二进制文件。该过程无需安装。
如果你想测试 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
开发人员工具不是标准 OS X 安装的一部分。 至少您需要命令行工具:
sudo xcode-select --install
但也建议从 App Store 安装 Xcode。
例如,安装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
和其他工具。
要构建 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 或在系统询问时手动接受库的使用。
将 QGIS 源解压缩到您选择的工作文件夹。 如果您是从源代码中阅读此内容,那么您已经完成了此操作。
如果你想体验最新的开发源码,请到 github QGIS 项目页面:
http://github.com/qgis/QGIS
它应该默认为 master 分支。 单击下载按钮并选择下载 .tar.gz。 双击 tarball 将其解压缩。
或者,使用 git 并通过以下方式克隆存储库
git clone git://github.com/qgis/QGIS.git
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
现在我们可以开始构建过程了(记住一开始的并行编译说明,这是一个使用它的好地方,如果可以的话):
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
要求:Ubuntu / Debian 衍生发行版
这些注释适用于 Ubuntu,其他版本和 Debian 衍生发行版可能需要包名称略有不同。
请注意,一旦将这项工作集成到 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/
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>
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
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
sudo tail -f /var/log/apache2/wcs_example.com/error.log
假设:您知道如何制作一个工作的构建环境,并希望现在将其部署在 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
build/CTestResults.xml
现在打开 Job 仪表板并将某些内容推送到 QGIS 并等待一分钟以验证自动构建工作。
注意:您需要登录 Jenkins 用户帐户并转到 /var/lib/jenkins/jobs/QGIS/workspace,然后创建一个build
目录并运行初始的 cmake 设置,然后进行测试构建。 此过程与本文档其他地方描述的相同。
下面这篇不错的博客文章中列出了一些设置:
http://alexott.blogspot.com/2012/03/jenkins-cmakectest.html
如果您有兴趣查看嵌入式调试输出,请更改以下 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
以下人员为本文档做出了贡献:
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 测试服务器部分
Jenkins CI 配置
Tim Sutton(蒂姆·萨顿) 2012
Latex生成
调试输出/测试部分
MXE/Mingw64 部分
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。