構文
mkmf [-acdeil] [-f makefile] [-F template] [-M language] [macroname=value... ]
説明
mkmf コマンドは、プログラムおよびライブラリの構成および保守方法を make コマンドに指示する makefile を作成します ( make(1) を参照)。 現在のワークディレクトリにおけるすべてのソースコード
ファイル名を収集して makefile に挿入した後、 mkmf はインクルードされたファイルのソースコードをスキャンし、makefile に追加する従属情報を生成します。
ソースコード ファイルは、ファイル名の拡張子により識別されます。 mkmf は以下の拡張子を認識します。
| .c | | C |
| .C | | C++ |
| .f | | FORTRAN |
| .h | | インクルードファイル |
| .i | | Pascal インクルードファイル |
| .l | | Lex または Lisp |
| .o | | オブジェクトファイル |
| .p | | Pascal |
| .r | | Ratfor |
| .s | | アセンブラ |
| .y | | Yacc |
mkmf コマンドは、生成する前に既存の makefile があるかどうかチェックします。 -f オプションを指定しない場合、 mkmf は makefile および Makefile の存在をチェックします。
makefile 作成後、テキストエディタを使用して任意の変更を行えます。
また、 mkmf は作成後に行われた変更とは関係なく、makefile におけるマクロ定義を再エディットするのに使用できます。
デフォルトでは、 mkmf はプログラム makefile を作成します。
ライブラリを処理する makefile を作成するには、 -l オプションを使用しなければなりません。
make の要求
mkmf により作成される makefile を指定した場合は、 make は以下の要求を認識します。
| all | | プログラムまたはライブラリをコンパイルしてロードします。 |
| clean | | すべてのオブジェクトおよびコアファイルを削除します。 |
| clobber | | 再生成可能なすべてのファイルを削除します。 |
| depend | | makefile においてインクルードされたファイルの依存関係をアップデートします。 |
| echo | | 標準出力にソースコード ファイルの名前のリストを示します。 |
| extract | | ライブラリから全オブジェクトファイルを抽出し、それらをソースコード
ファイルと同じディレクトリに置きます。 ライブラリは変更されません。 |
| index | | 関数のインデックスを標準出力にプリントします。 |
| install | | プログラムまたはライブラリをコンパイルおよびロードし、宛先ディレクトリに移動します。 |
| print | | ソースコード ファイルを標準出力にプリントします。 |
| tags | | ex エディタ ( ex(1) および ctags(1) を参照) 向けに、C、Pascal、Fortran ソースコード
ファイルについての タグファイルを生成します。 |
| update | | プログラムまたはライブラリより新しいソースコード
ファイルがある場合に限り再コンパイルし、プログラムまたはライブラリをリンクしてインストールします。 |
同時に複数の要求を行えます。 例えば、(1) プログラムをコンパイル、リンク、(2) プログラムを宛先ディレクトリに移動、(3) すべての不要なオブジェクトファイルを削除するには以下のように使用します。
マクロ定義
mkmf は以下のマクロ定義を理解します。
| CFLAGS | | C コンパイラフラグ。 現在処理中のディレクトリに含まれるファイルを検索した後、 mkmf は -I コンパイラオプションで指定されたディレクトリに続いて、 /usr/include ディレクトリを検索します。 |
| COMPILESYSTYPE | | /usr/include の位置。 COMPILESYSTYPE マクロまたは環境変数が定義されている場合、 mkmf は /usr/include ではなく /$COMPILESYSTYPE/usr/include にあるファイルを検索します。 |
| CXXFLAGS | | C++ コンパイラフラグ。 現在処理中のディレクトリに含まれるファイルを検索した後、 mkmf は、 -I コンパイラオプションで指定されたディレクトリ、次に /usr/include/CC ディレクトリ、続いて /usr/include ディレクトリを検索します。 |
| DEST | | プログラムまたはライブラリをインストールするディレクトリ。 |
| EXTHDRS | | カレントディレクトリの外部に含まれるファイルのリスト。
従属情報が生成されると、 mkmf は makefile におけるこのマクロ定義を自動的にアップデートします。 |
| FFLAGS | | Fortran コンパイラフラグ。 現在処理中のディレクトリに含まれるファイルを検索した後、 mkmf は -I コンパイラオプションで指定されたディレクトリ、続いて /usr/include ディレクトリを検索します。 |
| HDRS | | カレントディレクトリに含まれるファイルのリスト。 mkmf は makefile におけるこのマクロ定義を自動的にアップデートします。 |
| INSTALL | | インスタレーションプログラム名 |
| LD | | リンクエディタ名 |
| LDFLAGS | | リンクエディタフラグ |
| LIBRARY | | ライブラリ名。 また、このマクロは -l オプションをも含みます。 |
| LIBS | | リンクエディタが外部参照を解決するのに必要なライブラリのリスト |
| MAKEFILE | | makefile 名 |
| OBJS | | オブジェクトファイルのリスト。 mkmf は、makefile におけるこのマクロ定義を自動的にアップデートします。 |
| PROGRAM | | プログラム名 |
| SRCS | | ソースコード ファイルのリスト mkmf は、makefile におけるこのマクロ定義を自動的にアップデートします。 |
| SUFFIX | | mkmf が認識するべき、ファイル名の拡張子を追加するためのリスト |
| SYSHDRS | | /usr/include ディレクトリ階層に含まれるファイルのリスト。
依存関係情報が生成されると、 mkmf は makefile におけるこのマクロ定義を自動的にアップデートします。 SYSHDRS が makefile から省略された場合、 mkmf は /usr/include 依存関係条件を生成しません。 |
これらおよびすでに makefile にある他のマクロ定義は、 macroname=value 形式でコマンド行において置き換えられます。
例えば、C コンパイラフラグおよびプログラム名を変更するには以下の行をタイプしてください。
mkmf "CFLAGS=-I../include
-O" PROGRAM=mkmf
空白のある CFLAGS などのマクロ定義は、ダブルクォーテーション (") マークで囲まなければならないことに注意してください。
環境
mkmf により環境が読み込まれます。 HDRS, EXTHDRS, SRCS,
および OBJS を除くすべての変数は、マクロ定義であるものと仮定されます。
環境変数は、コマンド行のマクロ定義および makefile におけるマクロ定義の後に処理されます。 -e オプションにより、環境は強制的に makefile におけるマクロ定義を置き換えます。
ファイル名の拡張子
mkmf は、 SUFFIX マクロ定義における拡張子記述を指定することにより、ファイル名の拡張子を追加して認識すること、またはすでに認識しているものを無視することができます。
各拡張子記述では .suffix:tI の形式をとります。ただし、 t はファイルの内容を示す文字です (s はソースファイル、 o はオブジェクトファイル、 h はヘッダファイル、 x は実行ファイル)。
また、 I はヘッダファイルのインクルード構文を示すオプションの文字です
(C は C 構文、 C++ は C 構文に標準検索ディレクトリとして /usr/include/CC を追加したもの、 F は Fortran および Ratfor 構文、 P は Pascal 構文)。
以下のリストは、 mkmf のデフォルトの設定を示します。
| .c:sC | | C |
| .C:sC++ | | C++ |
| .f:sF | | Fortran |
| .h:h | | インクルードファイル |
| .i:h | | Pascal インクルードファイル |
| .l:sC | | Lex または Lisp |
| .o:o | | オブジェクトファイル |
| .p:sP | | Pascal |
| .r:sF | | Ratfor |
| .s:s | | アセンブラ |
| .y:sC | | Yacc |
例えば、オブジェクトファイルの拡張子を .obj に変更し、Pascal インクルードファイルの拡張子定義を解除し、インクルードされたファイルに Fortran ファイルをスキャンしないためには、 SUFFIX のマクロ定義は以下にようにします。
インクルード文の構文
C, C++, Fortran, および Pascal ソースコードのインクルード文の構文は以下の形式となります。
| C/C++: | | #include "filename" #include filename ただし、 # は行の最初の文字でなければなりません。 |
| Fortran: | | $include ' filename '$ $INCLUDE ' filename '$ ただし、 $ は行の最初の文字でなければなりません。
または、インクルード文がカラム 7 から始まる場合は $ は省略できます。 いずれの場合も後続の $ は省略できます。 |
| Pascal: | | $include ' filename '$ $INCLUDE ' filename '$ ただし、 $ は行の最初の文字でなければならず、後続の $ はオプションです。 |
ユーザー定義のテンプレート
カレントディレクトリに makefile がない場合、 mkmf は、通常 /usr/ccs/lib/mf にある標準 makefile テンプレートの C.p または C.l のうちから 1 つを使用します。
ただしそれは、ユーザーがディレクトリ $PROJECT/lib/mf に別の C.p または C.l のテンプレートファイルを持たない場合です。 $PROJECT は PROJECT 環境変数に割り当てられたディレクトリの絶対パス名です。
オプション
mkmf が認識するオプションは以下のとおりです。
| -a | | makefile の . で始まるソースファイルをインクルードします。 |
| -c | | " creating makefile from ... "メッセージを抑止します。 |
| -d | | include ファイルのソースコードのスキャンをオフにします。
古い依存関係情報は、makefile ではそのままにされます。 |
| -e | | 環境変数は makefiles 内のマクロ定義に優先します。 |
| -f makefile | | 別の makefile ファイル名を指定します。 デフォルトファイル名は Makefile です。 |
| -i | | ユーザーにプログラムまたはライブラリ、およびインストールするディレクトリの名前を求めます。
これらの各問合わせに対する応答でキャリッジリターンがタイプされた場合、 mkmf は、デフォルトのプログラム名が a.out ,
またはデフォルトのライブラリ名が lib.a , また宛先ディレクトリがカレントディレクトリであると仮定します。 |
| -l | | makefile を強制的にライブラリ makefile とします。 |
| -F template | | 別の makefile テンプレートのパス名を指定します。 パス名は、絶対パス名または相対パス名とすることができます。 |
| -M language | | 別の language 指定の makefile テンプレートを指定します。 デフォルトの言語は C であり、対応するプログラムおよびライブラリの makefile テンプレートはそれぞれ C.p および C.l です。 mkmf はこれらのテンプレートを /usr/ccs/lib/mf または $PROJECT/lib/mf から検索します。 |
診断
終了ステータス 0 は正常終了です。 終了ステータス 1 はエラーを示します。
警告
makefile 名は makefile 内にマクロ定義として含まれており、makefile が名称変更されたときにはそれも変更しなければなりません。
実行可能ファイルはライブラリにより異なるため、標準ライブラリの省略形は makefile にある LIBS マクロ定義内で完全パス名に展開しなければなりません。
生成された依存関係情報は、makefile において ### で始まる行の後に表示されます。 この行は削除しないでください。
また、makefile においてこの行の下には他の情報を挿入しないでください。
プログラムまたはライブラリの名前は、makefile 内の定義済みターゲット名と競合しないようにしてください。 make が自分自身を再帰的に無限回数実行するのを防ぐため、 update という名前は避けることが特に重要です。
著者
mkmf はカリフォルニア大学バークレー校で開発されました。
ファイル
| /usr/ccs/lib/mf/C.p |
| | | 標準プログラムの makefile テンプレート |
| /usr/ccs/lib/mf/C.l |
| | | 標準ライブラリの makefile テンプレート |
| $PROJECT/lib/mf/C.p |
| | | ユーザー定義のプログラム makefile テンプレート |
| $PROJECT/lib/mf/C.l |
| | | ユーザー定義のライブラリ makefile テンプレート |
参照
ar(1), ctags(1), ld(1), make(1)
『Automatic Generation of Make Dependencies』, Software-Practice
and Experience, Walden, K., vol. 14, no. 6, pp. 575-585, June 1984.