コンパイル方法
前回まではメイン処理プログラムのみだったので、コンパイルはコマンドで直接実行型ファイルを作成する方法にとどめていました。今回は、複数のプログラムをコンパイルするので、手順が若干異なります。
直接実行型ファイルを作成するコンパイルコマンド
ソースファイルからオブジェクトファイルを作成せずに、直接実行型ファイルを作成するコンパイルコマンドは次のとおりです。
cobc -x -o 実行ファイル名 メイン処理プログラムソースファイル名 連携先プログラムソースファイル名
-oスイッチと実行ファイル名は省略することが出来ます。その場合は、メイン処理プログラムソースファイル名からOpenCOBOLソースファイルの拡張子である「.cob」が除かれたファイル名で、実行ファイルが作成されます。また、連携先プログラムが複数ある場合は、対象の連携先プログラム全てのソースファイル名を指定します。
メイン処理プログラムソースファイル名を「mainprog.cob」、連携先プログラムソースファイル名をそれぞれ「subprog1.cob」「subprog2.cob」、実行ファイル名を「progexe」とした場合のコンパイルコマンド例は次のとおりです。
/usr/local/bin/cobc -x -o progexe mainprog.cob subprog1.cob subprog2.cob
ソースファイルの規模が小さく、ソース数が少ない場合は、直接実行型のコンパイルで十分に対処できます。しかし、各ソースの規模が大きく、多数の連携先プログラムソースがある場合、1つのソース変更だけでも、全てのソースを取り込んでコンパイルするなど、マシンパワーを著しく消費します。
それゆえ、次項で説明する分割コンパイルがお勧めです。
分割コンパイルによる実行型ファイルの作成方法
ソースファイルからオブジェクトファイルを作成し、最後に実行型ファイルを作成するコンパイルコマンドについて説明します。
メイン処理プログラムのコンパイル方法
メイン処理プログラムのコンパイルコマンドは次のとおりです。
cobc -c -x -o オブジェクトファイル名 メイン処理プログラムソースファイル名
前項のコンパイルコマンドと相違しているのは、-cスイッチが付いていることです。-cはソースファイルをコンパイルしてオブジェクトを生成するスイッチです。
前項と同様、-oスイッチは省略することができます。その場合、メイン処理プログラムソースファイル名からOpenCOBOLソースファイルの拡張子である「.cob」が除かれ、代わりに「.o」拡張子が付いたファイル名でオブジェクトファイルが作成されます。
メイン処理プログラムソースファイル名を「mainprog.cob」、オブジェクトファイル名を「mainobj.o」とした場合のコンパイルコマンド例は、次のようになります。
/usr/local/bin/cobc -c -x -o mainobj.o mainprog.cob
メイン処理プログラム以外のコンパイル方法
メイン処理プログラム以外、すなわち連携先プログラムのコンパイル方法は次のとおりです。
cobc -c -o オブジェクトファイル名 ソースファイル名
メイン処理プログラムコンパイルコマンドとの相違は、-xスイッチを付けないことだけです。もちろん、-oスイッチとオブジェクトファイル名を省略することもできます。
ソースファイル名を「subprog.cob」、オブジェクトファイル名を「subobj.o」とした場合のコンパイルコマンド例は、次のようになります。
/usr/local/bin/cobc -c -x -o subobj.o subprog.cob
実行型ファイルの作成
メイン処理プログラムと連携先プログラムのコンパイルが終了し、実行型ファイルを作成する場合のコマンドは、次のとおりです。
cobc -x -o 実行型ファイル名 メイン処理プログラムオブジェクトファイル名 その他のオブジェクトファイル名
ソースファイル名で指定するのではなくオブジェクトファイル名で指定する点を除けば、先に説明した「直接実行型ファイルを作成するコンパイルコマンド」と同じ内容です。「その他のオブジェクトファイル名」が複数ある場合は、複数指定します。メイン処理プログラムのみで連携先プログラムが無い場合は、その他のオブジェクトファイル名のパラメータは指定しません。
メイン処理プログラムオブジェクトファイル名を「mainprog.o」、その他のオブジェクトファイル名を「subprog1.o」「subprog2.o」、実行ファイル名を「progexe」とした場合のコンパイルコマンド例は、次のとおりです。
/usr/local/bin/cobc -x -o progexe mainprog.o subprog1.o subprog2.o
