1

我是 COBOL 和 AS/400 IBM iSeries 领域的新手,并且对这个社区中使用的最佳实践感兴趣。

人们如何对所有 COBOL 成员或一次多个成员执行批量编译?

我看到 AS/400 源文件是按库、文件对象和成员组织的。如何检测哪些文件成员是要编译的 COBOL src 代码?你能通过一些 qshell 命令获取成员文件类型(在这种情况下应该是 CBL)吗?

谢谢,阿库

4

2 回答 2

4

常见的PDM手动方法:

可能最简单和最广泛使用的方法是在“绿屏”(5250 仿真)会话中使用 PDM(程序开发管理器)。这使您可以手动选择要编译的每个程序。它可能不是您要寻找的答案,但它可能是使用最广泛的,因为它的方法简单,并且将决定权交给了开发人员。

人们通常使用 Start PDM 命令STRPDM,它提供了一个菜单,您可以在其中选择一个选项来处理库、对象(文件)或成员的列表。(就个人而言,我更喜欢直接使用相应的命令,WRKLIBPDMWRKOBJPDMWRKMBRPDM。)在每个级别中,您都可以通过按 F17(shift F5)来过滤列表。

F18 (shift F6) 允许您将选项设置为批量编译。这意味着每个单独的编译都将被提交到一个作业队列,以在其自己的作业中进行编译。您还可以指定要使用的作业描述,这将确定作业放置在哪个作业队列中。一些作业队列可能是单线程的,而另一些可能同时运行多个作业。您可以使用 F16 自定义定义自己的 PDM 选项。

如果您选择从库级别开始,您可以在您希望使用其对象(源文件)的每个库旁边输入选项 12。

在对象级别,您可能只想查看 *FILE 类型的对象,以及属性“PF-SRC”(或可能是“PF38-SRC”)。然后,您可以在您希望与其成员一起使用的任何源文件旁边输入选项 12。

在成员级别,您可能希望过滤以键入*CBL*,因为(取决于系统上的操作方式)COBOL 成员可能是 CBL、CBLLE、SQLCBL、SQLCBLE,甚至是 System/38 或 /36 变体。在您希望编译的每个成员旁边键入选项 14(或自定义选项)。您可以使用 F13(Shift F1)在列表中重复一个选项。

此方法使用手动选择,不会自动选择所有要编译的 COBOL 程序。但它确实允许您一次提交大量编译,并使用程序员自行决定选择哪些成员以及使用哪些选项。

于 2012-07-25T22:51:07.383 回答
3

IBM i 上的许多(如果不是大多数)开发人员通常对 qshell 不是很熟悉。我们大多数人都在 CL 中编写自动化脚本。像我这样的少数叛徒也可能使用 REXX,但遗憾的是这种情况很少见。我们不经常想要重新编译系统中的所有程序。通常我们只编译我们正在使用的程序,或者只选择那些受某些文件更改影响的程序。

编译一切可能不是一个简单的问题。请记住,一些库或源文件可能只是旧源的存档副本,您可能真的不想编译,或者可能不再成功编译。您可能想要区分哪些成员是 COBOL 抄写本,而不是程序。使用 ILE,您可能希望区分哪些成员应编译为程序、模块或服务程序。在编译与它们绑定的程序之前,您可能需要编译模块。这些模块可能不一定是用 COBOL 编写的,或者 COBOL 模块可能绑定到其他语言的 ILE 程序中,可能是 CL 或 RPG。

那么如何在 CL 程序中自动重新编译完整的系统呢?您可以使用DSPOBJD *ALL/*ALL *FILE OUTPUT(*FILE) OUTFILE( ___ ). 输出文件包含一个文件属性列,用于区分哪些对象是源文件。您的 CL 程序可以读取它,并且对于每个源文件,它可以生成一个包含详细成员信息的文件,其中包含DSPFD &lib/&file TYPE(*MBR) OUTPUT(*FILE) OUTFILE( ___ ). 该文件包含成员类型信息,可以帮助您确定哪些成员是 COBOL。从那里您可以确定RTVOBJD它是否是程序、模块和/或服务程序。

您可能还需要了解如何编译单个程序、模块或服务程序的选项。我经常通过创建一个源文件来解决这个问题,我通常称之为 BUILD,每个需要特殊处理的对象都有一个成员。这个成员可能是 CL,但我经常使用 REXX。事实上,我可能很想在 REXX 中完成所有事情,因为它作为一种动态解释语言具有强大的功能。但这只是我。

于 2012-07-25T23:36:41.170 回答