本教程通过vs2019/vs2017/vs2015测试通过,流程大体一致,测试为最新版本GDAL3.3.2,下面是参考教程。

VS2017编译最新的GDAL3.2.0

下载源码:

GDAL下载源码:https://github.com/OSGeo/gdal/releases/

proj源码下载:https://github.com/OSGeo/PROJ/releases/tag/8.1.1

sqilte3源码下载:https://www.sqlite.org/download.html

sqlite-amalgamation-3360000.zip C source code as an amalgamation和sqlite-dll-win64-x64-3360000.zip 64-bit DLL (x64) for SQLite

geos源码下载:https://trac.osgeo.org/geos/

TIFF源码下载:https://www.linuxfromscratch.org/blfs/view/stable/general/libtiff.html

curl源码下载:https://curl.se/download.html

cmake下载:https://cmake.org/download/

everything下载:https://everything.en.softonic.com/?ex=BB-1857.0

Sqlite3.3
sqlite3官方网站
sqlite3主要是下载这两个压缩包:

[C++][修改]GDAL源码编译vs2015/vs2017/vs2019_sqlite


GEOS3.8.1

GEOS官方网站

TIFF4.1.0
TIFF官方网站

CURL7.73.0
CURL官方网站

辅助工具
cmake
cmake是windows下很强的一个编译工具。其下载地址如下:cmake下载地址

everything
everything这个软件主要是为了搜索一些Windows链接库,这是:Everything下载链接

notepad++
notepad++则主要是为了修改一些文件里面的东西,这里就不贴链接了,网上随便下。

准备工作
编译Sqlite3
VS2017新建一个空项目,名为sqlite3,叫别的名字也行。项目添加现有项,选择sqlite3的源码,如下图所示:

[C++][修改]GDAL源码编译vs2015/vs2017/vs2019_sqlite_02

sqlite3的编译,需要编译几个东西:

编译lib库,Debug和Release版本都要;
编译.exe的可执行文件,需要的话debug和release版本;
编译.dll库,这个需要添加那个sqlite3.def文件。
项目中修改编译的类型的就再项目属性界面的红框处修改,上面每一个都要编译一次。
编译完了之后,新建一个sqlite3的文件夹(任何你想放的地方),在这个文件夹下新建bin、lib、include三个文件夹,将编译生成的.exe和.dll复制到新文件夹的bin目录下,将sqlite3的源码复制到include文件夹下,将生成的.lib文件复制到lib文件夹下。

编译TIFF
下载tiff的源码并解压,打开cmake软件,将tiff源码目录下的cmakelist.txt文件拖到cmake中,如下:

[C++][修改]GDAL源码编译vs2015/vs2017/vs2019_源码下载_03

选择了编译器之后,点击configure。这一步一般不会报错。然后修改以下项:

[C++][修改]GDAL源码编译vs2015/vs2017/vs2019_python_04

这一步的路径是你最后选择install之后,lib库等的安装位置。cmake_install_prefix就是cmake的安装前缀,即安装路径。
修改了之后点击generate按钮,会生成相应的项目解决方案。如下所示:

[C++][修改]GDAL源码编译vs2015/vs2017/vs2019_源码下载_05

选择用VS2017打开tiff.sln,然后进行如下两步:

先AllBuild,debug和release

[C++][修改]GDAL源码编译vs2015/vs2017/vs2019_windows_06


再安装(install),debug和release。(这一步就是吧生成的库安装到你再cmake中选择的cmkae_install_prefix的那个目录下) 

[C++][修改]GDAL源码编译vs2015/vs2017/vs2019_sqlite_07

编译CURL
CURL的编译跟tiff的编译一模一样,这里不多说。

编译PROJ
proj的编译,需要添加sqlite3的库,如下图所示:

[C++][修改]GDAL源码编译vs2015/vs2017/vs2019_sqlite_08

修改上面几步。然后点击generate生成VS项目解决方案。
使用VS打开项目。

其他步骤和上面编译tiff的一样。但是有几点需要注意。

test_network添加预处理器命令“WIN32_LEAN_AND_MEAN”
编译过程中提示的大部分问题,基本都是没有添加相应的库。
在vs项目的ALL_BUILD项目中,添加sqlite3的lib库的路径,添加curl的库路径。就在项目属性的库目录中添加即可。
这一步做完,先编译proj这个项目,再去编译ALL_BUILD,然后最后选择INSTALL生成。

编译GEOS
GEOS的源码目录中有cmakelist.txt文件,因此跟前面编译tiff一样。这里不多BB。

GDAL的编译
GDAL的编译比较复杂。

生成VS项目
命令提示符或者Windows power shell切换到GDAL的源码目录,然后运行如下命令:

[C++][修改]GDAL源码编译vs2015/vs2017/vs2019_python_09

命令如下:generate_vcxproj 15.0 64 gdal_vs2017,这个命令是源码自带的Windows批处理命令,用于生成vs的项目文件
命令结束之后,会在源码目录下生成以下文件:

[C++][修改]GDAL源码编译vs2015/vs2017/vs2019_python_10

.sln文件不是命令生成的。

修改nmake.opt文件
这个文件其实就是nmake命令的配置文件。其中有一些地方需要修改,如下面的几张图里面的内容:

[C++][修改]GDAL源码编译vs2015/vs2017/vs2019_python_11

[C++][修改]GDAL源码编译vs2015/vs2017/vs2019_python_12

[C++][修改]GDAL源码编译vs2015/vs2017/vs2019_windows_13

[C++][修改]GDAL源码编译vs2015/vs2017/vs2019_c++_14


下面的内容很重要很重要 

[C++][修改]GDAL源码编译vs2015/vs2017/vs2019_源码下载_15

开始编译:

以管理员身份运行x64 Native Tools Command Prompt for VS 2017(VS2017的X64的本机工具命令提示)
位置:键盘Win(或者桌面"开始"按钮)——所有程序——Visual Studio 2017——Visual Studio Tools——VC——x64 Native Tools Command Prompt for VS 2017

[C++][修改]GDAL源码编译vs2015/vs2017/vs2019_python_16

在命令行输入(参考链接)(https://www.jianshu.com/p/bfbf2bec954c):
cd D:\GDAL\gdal
nmake /f makefile.vc MSVC_VER=1910 WIN64=yes
nmake /f makefile.vc install MSVC_VER=1910 WIN64=yes
nmake /f makefile.vc devinstall MSVC_VER=1910 WIN64=yes
关于为什么要写MSVC_VER=1910 WIN64=yes,MSVC_VER=1910表示VS2017 ,WIN64=yes表示64位。