アルゴリズム工学データベース
---

Makefile の簡単な書き方

ソース1つでも有効活用

---



プログラムパッケージを作る場合、 規模によって次のようなファイル構成が考えられます。 いずれの場合でも 'make' コマンドを活用することによって、 開発段階から効率的に作業できます。 パッケージ生成の機能も持たすことができますので、是非活用して下さい。 それでは見て行きましょう。

また、"README" やパッケージそのものの 各種雛型 も用意しました。ぜひご活用下さい。

'make' コマンドとは?

 'make' を実行すると、 カレントディレクトリの "Makefile" に従ってプログラムを実行しますが、 ファイル生成を目的に作られているだけあって、 ファイルのタイムスタンプを見て無用なプログラムを実行しない点が、 単なるシェルスクリプト(バッチファイル)と大きく異なります。

 この特徴から、主にコンパイル作業に使われますが、 もちろん単なるプログラム実行にも使うことができます。 'make clean' などは、その良い例です。

 "Makefile" を書かずとも 多くの環境では標準的な設定がしてあるので、 "hogehoge.c" から実行ファイル "hogehoge" を生成するには、 単に 'make hogehoge' と入力するだけでコンパイルしてくれます。 Fortran ソース "hogehoge.f" であっても、 やはり 'make hogehoge' でコンパイルできるところなんかは、 びっくりしてしまいます(コンパイラはちゃんと準備して下さい)。

 ちょっとした設定変更をするには、 やはり "Makefile" を書く必要がありますが、 一から書くのはバカバカしいので、ケースごとに雛型を紹介します。 これらを使った場合の 'make' コマンドの動作をまとめておきます。

コマンド動作
'make''make all'と同じ
'make all'実行ファイル生成
'make filename'"filename" 生成
'make clean'生成ファイル削除
'make run'サンプル実行
'make tar'tar パッケージ製作(UNIX)
'make zip'zip パッケージ製作(MS-Win)

 'all','clean' といったキーワードを用いるのは、 単なる習慣に過ぎませんが、この2つは非常に浸透しています。 最後の 'run', 'tar', 'zip' は、 一般には広まっていませんが、 便利だと思うので特に入れておきました。


1ソースファイル 1実行ファイル

 パッケージ名=実行ファイル名を考えます。 ここでは "hogehoge" としましょう。 すると、自動的に構成ファイル名も決まります。

ソースファイルhogehoge.c
実行ファイルhogehoge

 このような場合の Makefileこのファイル を使って下さい。 個別に修正する部分は3ヶ所だけです。

 また、この場合のパッケージの構成は次のようになります。 バージョン番号は日付をそのまま使うことにします。

パッケージ全体hogehoge-19991117.tar.gz
ドキュメントREADME などなど
MakefileMakefile
ソースファイルhogehoge.c

nソースファイル 1実行ファイル

 やはり、パッケージ名=実行ファイル名を考えます。 ここでも"hogehoge"としましょう。 構成ファイル名は、次のようにするのが一般的です。

ソースファイルhogehoge.c'main()'を含む)
xxxx.c(その他)
ヘッダファイルhogehoge.h (全ソース共通)
xxxx.h(その他)
実行ファイルhogehoge

 このような場合の Makefile は、 このファイル を使って下さい。

 また、この場合のパッケージの構成は次のようになります。 バージョン番号は日付をそのまま使うことにします。

パッケージ全体hogehoge-19991117.tar.gz
ドキュメントREADME などなど
MakefileMakefile
ソースファイルhogehoge.c などなど
ヘッダファイルhogehoge.h などなど

n×(1ソースファイル 1実行ファイル)

 実行ファイル名は、ソースファイル名から自動的に決まります。 パッケージ名は、これらと無関係で構いません。

ソースファイル program1.c program2.c ...
実行ファイル program1 program2 ...

 このような場合の Makefileこのファイル を使って下さい。

 また、この場合のパッケージの構成は次のようになります。 バージョン番号は日付をそのまま使うことにします。

パッケージ全体hogehoge-19991117.tar.gz
ドキュメントREADME などなど
MakefileMakefile
ソースファイルprogram1.c,program2.c,...

nソースファイル m実行ファイル

 基本的には、ディレクトリを複数作り、 各ディレクトリごとに 「nソースファイル 1実行ファイル」を採用することになります。 これは個別に対応してもらいましょうか。(^^;) 「各サブディレクトリで 'make' を実行する」 ための "Makefile" を1つ書けばよいだけですね。


カスタマイズ

バージョン番号を日付ではなく、指定する数字にする。
18行め付近 "VER=数字" とする。
tar.gz にディレクトリを含める。
"tar:" の4行後ろの 'ln' コマンドを 'cp -R' に書き換える。

残作業


参考資料


データベース [ 離散最適化 | グラフ | 幾何 | 並列/分散 ]
[ キーワード検索 ] [ リンク集 ] [ 動作確認環境 ]
参加メンバー [ 可視化 | パッケージ製作 | デバッグ術 | 標準入出力 | Makefile | 雛型 ]

土村 展之(tutimura@logopt.com)
<最終更新日 2000年5月7日 14時03分>