MS RFC 92:从自动工具迁移到CMAKE

日期

2013/03/26

作者

托马斯堡

联系

thomas.bonfort@gmail.com

状态

采用

版本

MAPServer 6.4

1。概述

我们当前的autoconf+makefile设置有几个限制:

  • 在搜索的库之间搜索外部依赖项不一致

  • 在默认位置找不到某些外部依赖项,从而强制在编译器/链接器标志中包含默认位置,从而阻止使用安装在非标准位置的其他依赖项(例如,如果将-l/usr/lib添加到链接器标志中,则即使用户要求使用g,也将使用/usr/lib/libgdal.so。DAL来自/opt/local/)

  • configure.in中发生的迭代次数开始显示…维护这个文件现在是一项相当成熟的任务

  • 不支持自动工具的平台的构建文件与标准生成文件一起手工维护。

  • MAPScript构建没有使用主体构建进行流线型化,并且需要为每种语言定制指令。

  • 支持的功能和可用的系统功能在编译器命令行上声明为defines,从而防止在不需要确切知道应添加哪些定义的情况下安全使用头文件(因此需要mapserver config和mapservervars hacks能够构建mapscripts)

2。建议的解决方案

切换到cmake(http://www.cmake.org)以替换设置中的autoconf+makefile.in。CGEAR旨在以跨平台的方式构建和安装C/C++项目。

三。实施细节

  • 删除当前的自动工具/生成文件相关文件

  • 实现cmakefiles,复制我们对依赖项的搜索并构建

  • 使用mapserver.h包含的生成的mapserver config.h,其中包含我们现在在命令行上传递的定义(-duse_ogr或-dneed_str)

  • 将mapserver发布信息存储在cmakefiles中,并将该信息包含在生成的mapserver.h版本中。

3.2受影响的文件

删除文件:
  • */生成文件*/makefile.in

  • configure.in配置

  • aclocal.m4

  • README.Configure

文件添加:
  • */CMakeLists.txt

  • mapserver-config.h.in.中的

  • mapserver-version.h.in版本

3.3MapScript

MAPScript构建将与主构建过程一起简化,通常需要存在SWIG。

3.4向后兼容性问题

  • 不支持当前/配置处理。

  • 不直接支持针对仅作为静态库可用的依赖项进行链接。解决方法应该是可能的,如果需要,将被记录下来。

  • 安装的二进制文件将不会设置到libmapserver的rpath。如果将libmapserver安装到非标准位置,则必须设置指向该位置的ld_library_路径。

  • 当前的win32 buildfiles需要更新,因为在mapserver.h中已重命名了need strxxx定义以使其具有strxxx

4。从自动工具习惯迁移时的提示

  • cmake构建最好在“源代码外”运行,即在源文件的单独目录中:

    $ cd mapserver
    $ mkdir build
    $ cd build
    $ cmake ..
    # fix dependency problems
    $ make
    
  • 许多新功能在默认情况下启用/查找,而不是被静默忽略。

  • 报告缺少依赖项时会显示一条指示解决方法的错误消息。通过将-dwith_xxx=0添加到cmake调用中可以禁用不需要的依赖项(例如-dwith_fribidi=0-dwith_wfs=0)

  • mapscripts不是默认构建的,而是通过添加-dwith_php=1-dwith_python=1等来启用的…

  • 安装在默认位置之外的依赖项可以通过添加-dcmake_prefix_path=/path/to/gdal prefix;/path/to/libxml2 prefix来引用。

5。性能影响

没有

6。臭虫识别码

https://github.com/MapServer/MapServer/issues/4617

7。投票历史

+1人来自托马斯布、米克斯、汤克、杰夫姆、丹尼尔、奥利维埃、史蒂文、史蒂文和佩林。