RPG
88. 同じRPGソースで複数のOS400対応のコンパイルをするには?
OS400のリリースに依存する新しい命令を使用したいのだが 対応していない古いOS400用
にもコンパイルしなければならない。
OS400のリリース別にソースを分けてしまうと維持管理が面倒にも なるし、保守の間違いや
漏れを発生する可能性がある。
このような場合への対応を紹介する。
V3R7M0 からはRPGコンパイル・コマンドには「条件名の定義」という パラメータが追加
されている。
ここにユーザーが指定する任意の文字列を定義すると、 コンパイラーは、それに従って
コンパイル時にソースの一部を 除去してコンパイルしてくれることが可能となる。
例えば OS400 V4R4M0 からは H仕様書にバインド・ディレクトリーを
    H BNDDIR('QC2LE')
のように指定することができる。
BNDDIR を記述しておけば CRTPGMCRTBNDRPG でバインド・ディレクトリーを
指定する必要がない という便利な機能である。
ところが V3R7M0 では BNDDIR を指定することはできない。
そこで、この記述を
     /IF NOT DEFINED(V3R7M0)
    H BNDDIR('QC2LE')
     /ENDIF
と記述しておくと、V4R4M0環境でコンパイルすると BNDDIR はソースの一部として 認識されて
コンパイルされる。
一方、この同じRPGソースを V3R7M0 環境でコンパイルするときには
条件名の定義 .................... V3R7M0
と指定してコンパイルすると、BNDDIR の行は除去されるので コンパイル・エラーは発生すること無く、正常にコンパイルは終了する。
この手法は複数台の iSeries400を保有していて、異なるリリース対応への コンパイルが必要なソフトウェア・ハウスには有効な手段である。
弊社のRPGエンジンは、この手法によって異なるリリースに対して、同一のソースで コンパイル
されている。また C言語では、この手法はめずらしいものではない。
卑近な例としてあの「Perl」は数多くのOSプラットフォームに対応するために この手法を利用
している。
IBM RPG解説書にもこの使用方法の例が無いので紹介した。

PREVIOUS INDEX NEXT
HOME