我在 OpenVMS DEC ADA ENVIRONMENT 中有一个用 Ada 编写的批处理应用程序,我需要将它移植到 Windows。
我应该如何处理这个?
我将假设您不需要继续从相同的代码库维护 DEC Ada 版本。至少有两个可能的技术障碍。
首先, GNAT 使用的文件命名约定(您没有说,但我猜您将使用 GNAT)。默认情况下,GNAT 期望每个文件包含一个编译单元(规范或正文):所以
package Pkg is
...
end Pkg;
将在文件中pkg.ads
,并且
package body Pkg is
...
end Pkg;
将在文件中pkg.adb
。编译开始with Pkg;
GNAT 的文件时会查找pkg.ads
(不是Pkg.ads
,尽管在 Windows 或 macOS 上你会侥幸逃脱,它们具有不区分大小写但保留大小写的文件系统)。
您也许可以使用gnatchop来执行此操作。
gnatchop *.ada chopped
会将所有*.ada
源文件拆分为 GNAT 期望在目录中的文件chopped/
。
这里可能出错的一件事是,如果给定单元位于多个源文件中;您必须决定要保留哪一个(或者如果您需要两个版本来处理不同的环境,该怎么办)。
如果gnatchop不能满足您的需求,您可以尝试gnatname(上述参考,或此答案)。
其次,DEC Ada 支持很多 VMS 特有的特性。这是否会影响您取决于您的应用程序的原始程序员使用它们的广泛程度。你最好的选择是试一试;如果您遇到问题,请再问一次(请换一个问题!)
每当我将 Ada 从一个编译器/平台移植到另一个编译器/平台时,我总是跳入池的最深处,即 Just Do It。
获取安排在目标平台上的文件和目录,使用 gnatchop 或 gnatname 处理文件命名(根据 Simon 的回答),设置项目文件(我在 gps 中以交互方式执行此操作),然后按 F4(Build Main)。
根据需要进行修复。