IBM i中的Mass Compile Cobol代码(又名OS / 400,iSeries)

时间:2012-07-25 21:28:30

标签: shell ibm-midrange cobol

我是COBOL和AS / 400 IBM iSeries世界的新手,我对此社区中使用的最佳实践感兴趣。

人们如何同时对所有COBOL成员或多个成员进行批量编译?

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

谢谢, AKKU

2 个答案:

答案 0 :(得分:4)

Common PDM手动方法:

可能最简单和最广泛使用的方法是在“绿屏”(5250仿真)会话中使用PDM(程序开发管理器)。这允许您手动选择要编译的每个程序。它可能不是你想要的答案,但它可能是最广泛使用的,由于其简单的方法,并在开发人员的手中留下决定。

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

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

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

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

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

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

答案 1 :(得分: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中完成它作为动态解释语言的力量。但那只是我。