COBOL2002 使用の手引 手引編


32.7.2 makefile生成機能

〈この項の構成〉

(1) makefile生成機能の概要

makefile生成機能とは,COBOL2002で作成するプログラムやライブラリの作成方法や保守方法を,makeに通知するmakefileを生成する機能です。この機能は,cbl2kmfコマンドで使用します。生成したmakefileは,テキストエディタで変更できます。

(2) makefileの生成方法

(a) cbl2kmfコマンド

形式
cbl2kmf  〔-ls〕〔-f makefile名〕〔 マクロ名=値〕 …
機能
  • COBOL用のmakefileを生成します。

  • makefile生成前に,既存のmakefileの有無を調べます。

規則
-l

makefileをライブラリ用のmakefileにします。

-s

cbl2kmf起動前にmakefileが存在するとき,このオプションを指定してcbl2kmfコマンドを実行すると,存在するmakefileにあるマクロ定義やCOBOL言語用サフィックスは変更しないでmakefileを生成します。

ただし,次に示すものは,このオプションを指定しても,cbl2kmfコマンドを実行したときに対象となるCOBOLソースファイルを基に値を変更します。

・EXTHDRSマクロ

・HDRSマクロ

・OBJSマクロ

・SRCSマクロ

・COBOL原始プログラムとCOBOL登録集原文の依存関係を示すターゲット行とシェル行

なお,このオプションと同時に,cbl2kmfコマンドで指定できるマクロ定義や環境変数を指定したときは,指定されたマクロ定義や環境変数の値に変更してmakefileを生成します。

-f makefile名

makefileのファイル名を指定します。省略した場合は,Makefileになります。

マクロ定義

次のマクロ定義を使用できます。

・CBLMAIN

  メインプログラムのソースファイル名を指定します(COBOL以外のプロ

  グラムがメインプログラムのときは指定しないでください)。

・CBLFLAGS

  COBOL2002のコンパイラオプションを指定します。

  複数のフラグを指定するときは,引用符(")で囲んでください。

・LDFLAGS

  リンカに渡すオプションを指定します。複数のオプションを指定する

  ときは,引用符(")で囲んでください。

・PROGRAM

  実行可能ファイルの名称を指定します。このマクロの指定がない場合,

  実行可能ファイルの名称のデフォルトは,a.outです。

・LIBS

  リンク時に必要なライブラリを指定します。

・DEST

  実行可能ファイルおよびライブラリのインストール先を指定します。

・INSTALL

  インストールコマンドを指定します。

・LD

  リンクに使用するコマンドを指定します。

・MAKEFILE

  makefileの名称を指定します。このマクロ定義と-fオプションを同時に

  指定しているときは,-fオプションの指定値が有効になります。

  また,このマクロ定義と-fオプションの両方の指定がない場合,

  makefileの名称のデフォルトは,Makefileです。

・PRINT

  プリントコマンドを指定します。

・SHELL

  シェルを指定します。

・LIBRARY

  ライブラリの名称を指定します。このマクロの指定がない場合,

  ライブラリの名称のデフォルトは,lib.aです。

  また,このマクロ定義の指定がある場合は,-lオプションを仮定します。

  ただし,このマクロ定義とPROGRAMマクロ定義の両方の指定がある

  場合は,-lオプションを仮定しません。

環境変数

cbl2kmfに指定できる環境変数を次に示します。

環境変数

意味

デフォルト値

LD

リンクに使用するコマンドを指定

"ccbl2002"

CBLMAIN

メインプログラムのソースファイル名を指定

""

CBLFLAGS

COBOL2002のコンパイラオプションを指定

""

  • LD,CBLMAINおよびCBLFLAGSは,マクロ定義,環境変数,-sオプションの順に優先します。

  • 登録集原文を検索するディレクトリを設定する環境変数CBLLIBなど,ccbl2002コマンドでコンパイルするときに必要な環境変数は,cbl2kmfコマンド起動時も必要となります。環境変数の詳細については,「32.6.2 コンパイラ環境変数の一覧」を参照してください。

  • cbl2kmfコマンドは,次の終了コードを返します。

    終了コード

    意味

    0

    cbl2kmfは,正常に終了した。

    1

    cbl2kmfで,エラーが発生した。

    2

    cbl2kmfで,回復不能エラーが発生した。

注意事項
  • cbl2kmfコマンドでマクロ定義,環境変数およびオプションの指定がない場合,作成されたmakefile中のマクロの値は,システム既定のデフォルト値を使用します。

    cbl2kmfコマンドで-sオプションの指定がある場合は,cbl2kmf起動前に存在するmakefile中にあるマクロの値を使用します。

  • cbl2kmfコマンドにLIBRARYとPROGRAMの両方のマクロ定義を指定して,ライブラリ用のmakefileを生成する場合は,-lオプションの指定が必要です。

  • 生成したmakefile中のCOBOLマクロの名称は変更してはなりません。

  • 生成されたマクロ定義によるマクロ情報およびCOBOL言語用サフィックス情報は,###で始まるmakefileの行のあとに現れます。なお,###の行は変更してはなりません。

  • 生成された依存関係の情報は,####で始まるmakefileの行の後に現れます。これらの行を変更してはなりません。

  • ###の行以降に現れるマクロ定義によるマクロ情報の値およびCOBOL言語用サフィックス情報のシェル行は変更できます。

  • ソースファイル中にクラス定義,インタフェース定義,関数定義があった場合でも,次のディレクトリに対する環境変数は生成されません。

    ・リポジトリファイルの検索対象ディレクトリ

    ・リポジトリファイルの出力先のディレクトリ

  • ソースファイル中にクラス定義,インタフェース定義,関数定義があった場合でも,リポジトリファイルに対するCOBOL原始プログラムや登録集原文との依存関係を示す情報は生成されません。

  • cbl2kmfコマンドで生成されたmakefileを使用すると,ソースファイル名のアルファベット順にソースファイルがコンパイルされます。参照関係を持つクラス定義,インタフェース定義,関数定義がある場合は,参照先のソースファイルを先にコンパイルするために,参照先のソースファイル名は参照元のソースファイル名よりアルファベット順が先になるようにする必要があります。参照元および参照先のソースファイル(翻訳単位)の関係については,「33.1 リポジトリファイルを使用するCOBOLプログラム開発の概要」を参照してください。

    参照元および参照先のソースファイルと,生成されたmakefileでのコンパイル順序の例を次に示します。

    [図データ]

makefileの生成
cbl2kmf CBLMAIN=PROGRAM1.cbl
生成されたmakefileでのコンパイル順序
ccbl2002 -Compile,NoLink CLASS01.cbl
ccbl2002 -Compile,NoLink CLASS02.cbl
ccbl2002 -Compile,NoLink -Main,System PROGRAM1.cbl
  • 生成したmakefileでコンパイルを実行するときに指定しなければならないコンパイラオプションがある場合は,cbl2kmfコマンドを実行するときに必要なすべてのコンパイラオプションを次のどれかに指定してください。

    ・マクロ定義CBLFLAGS

    ・環境変数CBLFLAGS

    ・コンパイラ環境変数CBLCOPT2002

    また,必要なコンパイラオプションをコンパイラ環境変数CBLCOPT2002に指定してmakefileを生成した場合は,makeを実行するときにも同じコンパイラオプションを指定する必要があります。

(b) 使用例

makefile生成機能の使用例を示します。

前提条件

作成する実行可能ファイル名称

example1

原始プログラム名称

main.cbl

(主プログラム,原始プログラムに登録集cpy1.cbl,cpy2.cblを複写)

sub1.CBL

(副プログラム,原始プログラムに登録集cpy1.cblを複写)

sub2.cob

(副プログラム,原始プログラムに登録集cpy2.cblを複写)

登録集原文名

cpy1.cbl

(原始プログラムとは別ディレクトリ)

cpy2.cbl

(原始プログラムとは別ディレクトリ)

コンパイラオプション

-TDInf

(テストデバッグ機能が使用できる実行可能ファイルを作成)

-DoubleQuote

(原文中に引用符を使用)

ファイル構成と操作概要

[図データ]

makefileの内容
CBLMAIN       = main.cbl
CFLAGS        =
DEST          = .
EXTHDRS       = ../copylib/cpy1.cbl \
                    ../copylib/cpy2.cbl
HDRS          = 
INSTALL       = /usr/bin/install
LD            = ccbl2002
LDFLAGS       = -TDInf
LIBS          =
MAKEFILE      = Makefile
OBJS          = main.o \
                    sub1.o \
                    sub2.o
PRINT         = pr
PROGRAM       = example1
SHELL         = /bin/sh
SRCS          = main.cbl \
                    sub1.CBL \
                    sub2.cob
SYSHDRS       =
all:            $(PROGRAM)
$(PROGRAM):     $(OBJS) $(LIBS)
                    @echo "Linking $(PROGRAM) ..."
                    @$(LD) $(LDFLAGS) $(OBJS) $(LIBS) -o $(PROGRAM)
                    @echo "done"
clean:;         @rm -f $(OBJS) core
clobber:;       @rm -f $(OBJS) $(PROGRAM) core tags
depend:;        @cbl2kmf -s -f $(MAKEFILE) CBLMAIN=$(CBLMAIN)
echo:;          @echo $(HDRS) $(SRCS)
install:        $(PROGRAM)
                    @echo Installing $(PROGRAM) in $(DEST)
                    @-strip $(PROGRAM) ※1
                    @-strip -X 64 $(PROGRAM) ※2
                    @if [ $(DEST) != . ]; then \
                 (rm -f $(DEST)/$(PROGRAM); $(INSTALL) -f $(DEST) $(PROGRAM)); fi ※3
                 (rm -f $(DEST)/$(PROGRAM); $(INSTALL) $(PROGRAM) $(DEST)); fi ※4
print:;         @$(PRINT) $(HDRS) $(SRCS)
update:         $(SRCS) $(LIBS) $(HDRS) $(EXTHDRS)
                @$(MAKE) -f $(MAKEFILE) ROOT=$(ROOT) DEST=$(DEST) install
###
注※1

AIX(32),Linuxの場合に生成されます。

注※2

AIX(64)の場合に生成されます。

注※3

AIXの場合に生成されます。

注※4

Linuxの場合に生成されます。

上記のmakefileの内容の詳細は,システムのマニュアルを参照してください。

環境変数指定またはマクロ定義によるマクロ
CBL          = ccbl2002
CBLFLAGS     = -TDInf -DoubleQuote
CBLMAINOPT   = -Main,System
CBLCMPLOPT   = -Compile,NoLink
COBOL言語用サフィックス

.SUFFIXES : .cbl .CBL .cob .ocb .cbf .ocf

.cbl:

$(CBL) $(CBLFLAGS) $(CBLMAINOPT) $< $(LDFLAGS) -o $@

.cbl.o:

$(CBL) $(CBLFLAGS) $(CBLCMPLOPT) $<

.CBL:

$(CBL) $(CBLFLAGS) $(CBLMAINOPT) $< $(LDFLAGS) -o $@

.CBL.o:

$(CBL) $(CBLFLAGS) $(CBLCMPLOPT) $<

.cob:

$(CBL) $(CBLFLAGS) $(CBLMAINOPT) $< $(LDFLAGS) -o $@

.cob.o:

$(CBL) $(CBLFLAGS) $(CBLCMPLOPT) $<

.ocb:

$(CBL) $(CBLFLAGS) $(CBLMAINOPT) $< $(LDFLAGS) -o $@

.ocb.o:

$(CBL) $(CBLFLAGS) $(CBLCMPLOPT) $<

.cbf:

$(CBL) $(CBLFLAGS) $(CBLMAINOPT) $< $(LDFLAGS) -o $@

.cbf.o:

$(CBL) $(CBLFLAGS) $(CBLCMPLOPT) $<

.ocf:

$(CBL) $(CBLFLAGS) $(CBLMAINOPT) $< $(LDFLAGS) -o $@

.ocf.o:

$(CBL) $(CBLFLAGS) $(CBLCMPLOPT) $<

COBOL原始プログラムとCOBOL登録集原文の依存関係を示すターゲット行とシェル行
.main.o: main.cbl ../copylib/cpy1.cbl ../copylib/cpy2.cbl 
$(CBL) $(CBLFLAGS) $(CBLCMPLOPT) $(CBLMAINOPT) $<
sub1.o: sub1.CBL ../copylib/cpy1.cbl 
sub2.o: sub2.cob ../copylib/cpy2.cbl
具体的な操作
コマンド
cd     /home/src      *>1.
CBLLIB=/home/copylib  *>2.
export CBLLIB         *>3.
cbl2kmf  PROGRAM=example1 CBLMAIN=main.cbl 
         CBLFLAGS="-TDInf -DoubleQuote"
         LDFLAGS=-TDInf  *>4.
make                     *>5.
説明
  1. 原始プログラムが,存在するディレクトリを変更します。

  2. 登録集原文は,別ディレクトリであるため,cbl2kmfが検索できるように環境変数CBLLIBを設定します。

  3. 環境変数CBLLIBを有効にします。

  4. makefileを生成します。

  5. 実行可能ファイルexample1を生成します。

(3) cbl2kmfコマンドに関する注意事項

cbl2kmfコマンドは,COBOLソースファイルだけを対象としてmakefileを生成します。Cプログラムに対しては,makefileが生成されないので注意してください。

(4) makefileのマクロ一覧

cbl2kmfコマンドが生成するmakefileで定義するマクロ名の用途と値の設定可否を次に示します。

表32‒7 makefileのマクロ一覧

項番

マクロ名

用途

値の設定可否

マクロ定義

環境変数

1

CBLMAIN

メインプログラムのソースファイル名

2

CFLAGS

Cコンパイラのオプション

×

×

3

DEST

実行可能ファイルおよびライブラリのインストール先

×

4

EXTHDRS

登録集原文

×

×

5

HDRS

カレントディレクトリの登録集原文

×

×

6

INSTALL

インストールコマンド

×

7

LD

リンクに使用するコマンド

8

LDFLAGS

リンカに渡すオプション

×

9

LIBS

リンクするライブラリ

×

10

MAKEFILE

Makefileの名称

-fオプションでも指定可能

×

11

OBJS

オブジェクトファイル

×

×

12

PRINT

プリントコマンド

×

13

PROGRAM

実行可能ファイルの名称

×

14

SHELL

シェル

×

15

SRCS

ソースファイル

×

×

16

SYSHDRS

C言語ソースファイルのシステムヘッダ

×

×

17

LIBRARY

ライブラリの名称

×

18

CBL

COBOLコンパイルコマンド

×

×

19

CBLFLAGS

COBOL2002のコンパイラオプション

20

CBLMAINOPT

メインプログラムを指定するコンパイラオプション

×

×

21

CBLCMPLOPT

翻訳のみを指定するコンパイラオプション

×

×

22

SUFFIX

ファイル名の拡張子

×

×

(凡例)

○:cbl2kmfコマンド実行時に設定できる。

×:cbl2kmfコマンド実行時に設定できない。

注※

次のマクロは,cbl2kmfコマンドがCOBOLソースを解析してマクロの値を設定します。

・EXTHDRS

・HDRS

・OBJS

・SRCS

・SUFFIX