2012-07-19 72 views
2

有什麼方法可以指定程序源,在編譯過程中應該使用哪些激活組選項?如何在RPG或CL程序中爲激活組設置編譯器選項?

在我們大多數關於as/400的程序中,我們需要更改激活組的處理方式(因爲默認行爲根本沒用......)。每次我編的程序之一,我一定要記得設置編譯器選項(這是在PDM:進入14,打F4,從*YES改變DFTACTGRP*NO,打enter,改變ACTGRP*NEW*CALLER,這取決於程序) 。所以我們有很多程序開始時都有評論,有大量驚歎號,提醒程序員這樣做。是的,有時你會忘記。

有什麼竅門,所以你不必記住自己?

+0

我們實際上是爲RPG設計的,但是花了我多年的時間才找到CL的解決方案,而且很難在互聯網上找到,所以我只能在這裏發佈它(所以永遠不要忘記自己)。 – kratenko 2012-07-19 13:43:24

回答

5

您可以在RPGLE或CLLE程序源中設置這些編譯器選項。

角色扮演你可以在源代碼的頂部使用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和回車鍵)它以您在源中指定的激活組行爲結束。沒有什麼可以在那裏記住自己。

+1

也可以採取一套標準的H規格,把它們放到一個單獨的源成員(稱之爲QRPGLESRC中的STDHSPEC),然後在你的程序中,只需發出一份啊/ copy qrpglesrc,stdhspec這樣你就不需要記住每個'標準'選項;他們都在一個地方。 – 2012-07-19 14:15:15

+0

您可能有一組成員應該被編譯到不同的激活組中,因此您可以爲每個指定的激活組擁有一個這樣的副本,使用適合您成員的激活組。 – WarrenT 2012-07-19 16:26:45

+2

DCLPRCOPT添加了OS/400的CL編譯器的V5R4M0。如果您使用的是先前的操作系統版本(或者如果您將TGTRLS()用於以前的版本),嘗試使用DCLPRCOPT將獲得CPD0030獎勵(庫* LIBL中的命令DCLPRCOPT未找到)。 – Dennis 2012-07-30 18:12:17

2

@kratenko建議旁邊的另一種方法。如果您有默認的公司設置,則可以使用CHGCMDDFT更改命令默認值。例如CHGCMDDFT CRTBNDRPG 'DFTACTGRP(*NO)'等等。我們這裏的做法是始終將設置放在H-spec中,特別是對於一些特殊的非標準設置。如果有人忘記了,將使用默認公司設置。這種方法的一個問題是更新後的命令可能會在操作系統更新後重置。你可以使用2個方法之一

  1. 把所有的CHGCMDDFT在CL碼和每個操作系統後重新運行升級
  2. 複製,CHGCMDDFT所需的命令到庫,並把這個庫系統庫列表

我們改變了很少的其他命令默認,我更喜歡上面的方法1。 希望這會有所幫助

+0

升級是一個問題,對。我們並不需要爲這裏的每個程序都提供相同的值,所以這是行不通的。並且:我們的系統是> 20歲(我知道ILE不是那麼古老 - 只有19年..)。我們不敢在全球範圍內改變這樣的價值,我們有數百甚至數千個現有的計劃。 – kratenko 2012-10-24 12:01:02

1

H規格絕對是99%程序中的前進方向,但有時您會發現無法在h規格中設置的編譯器選項。過去我使用過源代碼控制軟件,它在源代碼頭中添加了這些選項作爲註釋,並在編譯時自動應用它。爲了解決在不同機器上編譯的問題,我們編寫了自己的編譯工具,可以讀取這些註釋。這是一個相當簡單的CL程序,你只需要決定評論的格式。

+0

如果沒有H規格,當然。否則,我會避免添加額外的語法和一個額外的工具,你可以忘記使用。但我懷疑,那也是你的看法。 – kratenko 2012-10-24 12:03:24

+0

是的,儘可能使用h-specs。 – 2012-10-24 13:55:33

相關問題