1. 项目背景与核心价值
在GIS(地理信息系统)开发领域,PROJ和GEOS是两个至关重要的基础库。PROJ负责处理地理坐标转换,而GEOS则提供了强大的空间几何运算能力。许多开发者都遇到过这样的困境:需要在自己的项目中集成这两个库,但官方提供的构建方式要么过于复杂,要么难以跨平台统一。
我最近在为一个跨平台GIS项目做技术预研时,发现手动编译这两个库不仅耗时费力,而且在不同操作系统上构建流程差异很大。于是决定开发一套通用的CMake构建脚本,实现以下目标:
- 一键完成PROJ和GEOS的下载、编译和安装
- 自动处理依赖关系(如SQLite3、TIFF等)
- 支持Windows/Linux/macOS多平台
- 可灵活集成到现有CMake项目中
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 环境准备与工具链选型
2.1 基础环境要求
在开始之前,需要确保系统已安装以下工具:
- CMake 3.12或更高版本
- Git(用于源码下载)
- 对应平台的编译工具链:
- Windows: Visual Studio 2019+ 或 MinGW
- Linux: GCC 9+ 或 Clang
- macOS: Xcode命令行工具
注意:PROJ 8.0+需要C++17支持,请确保编译器版本足够新。我曾在Ubuntu 18.04上遇到问题,最终通过升级GCC到9.0解决。
2.2 第三方依赖管理
这两个库有一些共同的依赖项,我的方案是:
- 对于小型依赖(如libtiff、sqlite3),直接使用CMake的FetchContent模块在线获取
- 对于大型依赖(如GDAL),提供选项让用户自行安装
- 通过设置CMAKE_PREFIX_PATH变量实现依赖查找
cmake复制# 示例:SQLite3依赖处理
include(FetchContent)
FetchContent_Declare(
sqlite3
URL https://sqlite.org/2023/sqlite-amalgamation-3420000.zip
)
FetchContent_MakeAvailable(sqlite3)
3. 核心构建脚本解析
3.1 PROJ构建模块
PROJ的构建有几个关键点需要注意:
