如何在RPG或CL程序中为激活组设置编译器选项?

时间:2012-07-19 13:42:11

标签: ibm-midrange compiler-flags rpgle rpg compiler-options

有没有办法为程序源指定,在编译期间应该使用哪些激活组选项?

在as / 400上的大多数程序中,我们需要更改激活组的处理(因为默认行为根本没有用......)。每当我编译其中一个程序时,我必须记住设置编译器选项(在PDM中:输入14,点击F4,将DFTACTGRP*YES更改为{ {1}},点击*NO,将enter更改为ACTGRP*NEW,具体取决于计划)。因此,我们在开始时有很多带有注释的程序,有大量的惊叹号,提醒程序员这样做。是的,有时你会忘记。

有没有诀窍,所以你不必记住自己?

3 个答案:

答案 0 :(得分:5)

您可以在RPGLE或CLLE程序源中设置这些编译器选项。

RPG 中,您可以使用源代码顶部的H-Specs来设置编译器选项。像这样:

HDFTACTGRP(*NO) ACTGRP(*CALLER)

只需将其添加到您拥有的任何其他内容中,例如:

H DEBUG DATEDIT(*YMD)
H DFTACTGRP(*NO) ACTGRP(*CALLER)
H BNDDIR('SRVBNDDIR')
H MAIN(main)
F OUTPUT   O    F 3000        DISK    USROPN
D ...
 * procedures, etc.

CL 中,有一个特殊的命令DCLPRCOPT,它实际上不是一个命令(因为它在运行时没有执行),而是一种设置编译器选项的方法。

DCLPRCOPT DFTACTGRP(*NO) ACTGRP(*CALLER)

将它放在程序的顶部。我通常把它放在变量声明之后和任何真正的命令之前。我还添加了一个简短的评论,因为我不认为每个可能正确我的代码的人都会理解在那里做了什么:

PGM        PARM(&SOMEPARM)
DCL        VAR(&SOMEPARM) TYPE(*CHAR) LEN(*64)
DCL        VAR(&COUNTER) TYPE(*DEC) LEN(5 0) 

/* Setting options for compilation of this program */
/* This is a permanent job, so we want a *NEW activation group. */
DCLPRCOPT DFTACTGRP(*NO) ACTGRP(*NEW)

/* do actual work here in a loop */
/* ..... */

ENDPGM

现在,当您编译程序时(只需在PDM中输入14并按Enter键),它将以您在源中指定的激活组行为结束。没有什么可以记住自己了。

答案 1 :(得分:2)

除了@kratenko建议之外的另一种方法。如果你有默认的公司设置,你可以使用CHGCMDDFT更改命令默认值。例如CHGCMDDFT CRTBNDRPG 'DFTACTGRP(*NO)'等等。我们的做法是始终将设置放在H-spec上,特别是对于某些特殊的非标准设置。如果有人忘了,将使用默认的公司设置。此方法的一个问题是更新的命令可能会在操作系统更新后重置。您可以使用2种方法之一

  1. 将所有CHGCMDDFT放入CL代码中,并在每次操作系统升级后重新运行
  2. 复制,CHGCMDDFT需要命令到库并将此库放入系统库列表
  3. 我们改变了很少的其他命令默认值,我更喜欢上面的方法1。 希望这有帮助

答案 2 :(得分:1)

H规格肯定是99%的程序中的前进方向,但偶尔你会找到一个无法在h规范中设置的编译器选项。我过去使用过源控制软件,它将这些选项添加为源标题中的注释,并在编译时自动应用它。为了解决在不同机器上编译的问题,我们编写了自己的编译实用程序,可以读取这些注释。这是一个相当简单的CL程序,你只需要决定评论的格式。