GMT4 → GMT5

撰写:

田冬冬

最近更新日期:

2021-08-21


GMT5 相对于 GMT4 有很多功能上的更新以及语法上的改进。最大的变化在于,GMT5 中所有 GMT 命令 必须以 gmt 开头。

GMT4 中使用 psbasemap 命令绘制底图、使用 pscoast 绘制海岸线。 psbasemappscoast 都是 GMT4 提供的命令,每个命令均对应一个可执行文件。 GMT4 总共提供了上百个命令,这带来一个命名空间污染(namespace pollution)的问题。 即不同的软件提供了相同名字的命令,导致不同命令之间出现冲突,使得用户难以确认 自己执行的 pscoast 命令是由 GMT 提供的还是其它软件包提供的。

为了解决这个问题,GMT5 对源码做了大量改写。GMT5 中只提供 gmt 这一个命令/可执行文件。 GMT4 中的所有命令在 GMT5 中都变成了 gmt 命令的模块。 所有模块都以 gmt module options 的形式进行调用。 例如,GMT4 中的命令 psbasemap 在 GMT5 中应写为 gmt psbasemap

因而,将 GMT4 脚本迁移到 GMT5 下,只需要遵循如下步骤:

  1. 将所有 GMT4 命令前加上 gmt。例如,psbasemap 改成 gmt psbasemap

  2. 保存并执行脚本。若出现报错,则找到最早的报错信息并查询当前 GMT 版本对应的文档, 检查是否语法存在变化,并进一步更正

GMT 提供了脚本 gmt5syntax,可以自动在 GMT4 命令前加上 gmt,该脚本位于 GMT 的 share/tools 目录下。该脚本的使用方法也很简单:

$ gmt5syntax old_script.sh > new_script.sh

如果不愿意修改原脚本,GMT 还为旧命令提供了软链接,使得依然可以直接使用 psbasemap 等命令, 但极其不推荐这一方法。为旧命令生成软链接有多种方法,用户可任选其一即可:

  1. 如果你是自行编译 GMT 源码,则可以在 cmake/ConfigUser.cmake 中加上 set (GMT_INSTALL_MODULE_LINKS TRUE) 再进行编译安装

  2. GMT 提供了一个脚本,可以用于检查软连接是否存在,同时也可以创建或删除软连接。 对于已经安装 GMT 的用户,可以执行以下命令以检查软连接是否已经存在:

    $ $(gmt --show-sharedir)/tools/gmt_links.sh
    

    执行如下命令为所有旧 GMT 命令创建软连接(可能需要 root 权限):

    $ $(gmt --show-sharedir)/tools/gmt_links.sh create
    

    也可以执行如下命令删除已有的软连接:

    $ $(gmt --show-sharedir)/tools/gmt_links.sh delete
    
  3. 对于 Bash 用户,可以直接在 Bash 脚本、终端或者 Bash 配置文件中加入如下语句:

    $ source $(gmt --show-sharedir)/tools/gmt_functions.sh
    

    该脚本会为所有旧命令构建一个等效的 bash 函数。

  4. 对于 csh 用户,可以直接在 csh 脚本、终端或者 csh 配置文件中加入如下语句:

    $ source `gmt --show-sharedir`/tools/gmt_aliases.csh
    

    该脚本会为所有旧命令构建一个等效的 csh 别名。