Windows下通过cmake编译mapserver

Mapserver的编译教程,官网上有,但是感觉已经好久没有更新,有一些内容不太适用,只能作为参考。

编译前的准备

在编译之前,要先下载好mapserver源码包以及mapserver的依赖库。官网中可以下载到源码包,同时官网也给出了三个渠道下载第三方库,分别是MS4WOSGeo4WGisinternals(FWTools官方表示已经弃用),如下图:

依赖库的下载

上面说到第三方依赖库的下载有三个渠道,我只用过OSGeo4WGisinternals这两个渠道。但是我在使用OSGeo4W下载的依赖库,会遇到缺失库文件以及库的版本不对问题,所以最后选择使用Gisinternals网站下的依赖库。

登录Gisinternals网站https://www.gisinternals.com,会看到有多个资源可供下载,选择Development Kits下载,看它后面的介绍是用于编译mapsever的。

根据你的编译器来选择你要下载的开发开发套件,由于我本机安装的是vs2015,所以我下载的是64位的release-1900-x64-dev这组开发插件(需要翻墙才能下)。

下载完成后,将其解压到你要编译的目录下,可以看到release-1900-x64-dev下包含以下文件。

其中,regex-0.12是MapServer使用的正则表达式库,release-1900-x64是一些第三方依赖库,SWIG-1.3.39不太清楚,这次编译不会用到。

开始编译

将你下载的源码包解压后拷贝到要编译的目录下,并在当前目录新建build文件夹用于存放生成的工程文件,如图所示:

配置环境变量

完成上面步骤,其实我们可以直接使用cmake-gui来编译,但是因为没有配置环境变量,所以有好多路径是没有找到的,需要手动设置,很麻烦。

为了能够让一些变量能自动匹配路径,我们可以通过写批处理来预先设置好一些环境变量。

新建一个txt文件,命名commend(具体什么命名无所谓)

将以下内容拷贝到里面。

@echo off

set VS140COMNTOOLS = C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\Tools\

call "C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat" x64

set INCLUDE=%INCLUDE%;C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\Include

set LIB=%LIB%;C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\Lib

set ROOT=E:\mapserver\x64\release-1900-x64-dev\release-1900-x64

set LIB_ROOT=%ROOT:\=/%

set LIB_DIR=%LIB_ROOT%

path %path%;C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin

path %PATH%;D:\Program Files\CMake\bin;%ROOT%\bin

@set INCLUDE=%INCLUDE%;%ROOT%\include

@set LIB=%LIB%;%ROOT%\lib

set LIB=%LIB%;%ROOT%\lib

set INCLUDE=%INCLUDE%

@cmd

注意说明:上面的路径以及要根据自己的实际情况,做适当地改变

(1)VS140COMNTOOLS表示VS15 

(若是VS2017则用语句VS150COMNTOOLS表示)

(2)Include表示头文件,这里加了Win10系统的sdk;Lib表示编译的动态库

(3)Path表示环境变量(刚才在前面没有设置的路径,现在也可以在这里添加)

 

保存txt的内容,将文件后缀名改为.bat,如图:

在当前目录下按住shift键不放,右击鼠标选择 “在此处打开power shell 窗口(s)” ,输入下面命令进入cmake窗口。

输入以下命令:path.bat(在win10新版本中语法规则改变,输入:.\commend.bat)

出现类似“Microsoft Windows 版本 10.0.17134.345 2018 Microsoft Corporation。保留所有权利。”字样,表执行成功

接着输入cmake-gui

将会打开CMake编辑页:

利用CMake构建项目

打开Cmake-gui界面,分别输入mapserver源码路径和构建的VS工程的输出路径:

点击下方“Configure”,将弹出VS版本选择,点击Finish,等待:

Configure后,会出现两个错误,首先我们看第一个错误:

根据报错信息,可以知道是PROTOBUFC相关的库,套件找不到。

在Seach输入PROTOBUFC,可以看到PROTOBUFC_COMPILER和PROTOBUFC_INCLUDE_DIR这两个变量找不到值,这里我们只能去手动添加:

PROTOBUFC_COMPILER是PROTOBUFC的编译器,位置在../release-1900-x64/bin/protoc.exe,我的环境完整路径是:

E:/mapserver/x64/release-1900-x64-dev/release-1900-x64/bin/protoc.exe。

PROTOBUFC_INCLUDE_DIR是包含的头文件信息,位置在../release-1900-x64/include/protobuf-c,我的环境完整路径是:

E:/mapserver/x64/release-1900-x64-dev/release-1900-x64/include/protobuf-c。

第二个问题,是这里警告找不到pg_config。

因为我本机没有搞postgis数据库,依赖包也没有这个文件,所以我们可以在WITH下找到WITH_POSTGIS,取消勾选:

重新进行Configure,没有报错。

 

接下来,进行“Generate”,等待完成。

Generate结束后,发现又报错了。

查看报错信息,是找不到regex.c这个文件,regex.c是Regex正则表达式库的里的文件,很明显,regex.c的路径变成了//regex.c,也就是它前面的路径没有了。

针对这个问题,我去看了mapserver源码下的cmakelist.txt里的信息,找到下面代码:

分析,可以看出${REGEX_DIR}是没有进行赋值的,所以${REGEX_DIR}的值为空。

解决这个问题,有两种方法,第一种,是在cmakelist.txt给REGEX_DIR进行赋值,如图:

修改后保存文件,再重新Generate,不再报错。

第二种方法,在cmake-gui界面进行添加,点击Add Entry:

Name填写REGEX_DIR,Type选择PATH,Value设置文件夹目录,点击OK:

REGEX_DIR变量就添加进来,重新Generate,编译通过:

推荐使用第二种方法,不用修改cmakelist.txt。

已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页