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.
- 説明
-
-
原始プログラムが,存在するディレクトリを変更します。
-
登録集原文は,別ディレクトリであるため,cbl2kmfが検索できるように環境変数CBLLIBを設定します。
-
環境変数CBLLIBを有効にします。
-
makefileを生成します。
-
実行可能ファイルexample1を生成します。
-
(3) cbl2kmfコマンドに関する注意事項
cbl2kmfコマンドは,COBOLソースファイルだけを対象としてmakefileを生成します。Cプログラムに対しては,makefileが生成されないので注意してください。
(4) makefileのマクロ一覧
cbl2kmfコマンドが生成する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 |
|
プリントコマンド |
○ |
× |
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