プログラムパッケージを作る場合、 規模によって次のようなファイル構成が考えられます。いずれの場合でも
- 1ソースファイル 1実行ファイル
- nソースファイル 1実行ファイル
- n×(1ソースファイル 1実行ファイル)
- nソースファイル m実行ファイル
'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などなどMakefile Makefileソースファイル hogehoge.cnソースファイル 1実行ファイル
やはり、パッケージ名=実行ファイル名を考えます。 ここでも
"hogehoge"としましょう。 構成ファイル名は、次のようにするのが一般的です。
ソースファイル hogehoge.c('main()'を含む)xxxx.c(その他)ヘッダファイル hogehoge.h(全ソース共通)xxxx.h(その他)実行ファイル hogehogeこのような場合の
Makefileは、 このファイル を使って下さい。また、この場合のパッケージの構成は次のようになります。 バージョン番号は日付をそのまま使うことにします。
パッケージ全体 hogehoge-19991117.tar.gzドキュメント READMEなどなどMakefile Makefileソースファイル hogehoge.cなどなどヘッダファイル hogehoge.hなどなどn×(1ソースファイル 1実行ファイル)
実行ファイル名は、ソースファイル名から自動的に決まります。 パッケージ名は、これらと無関係で構いません。
ソースファイル program1.cprogram2.c...実行ファイル program1program2...このような場合の
Makefileは このファイル を使って下さい。また、この場合のパッケージの構成は次のようになります。 バージョン番号は日付をそのまま使うことにします。
パッケージ全体 hogehoge-19991117.tar.gzドキュメント READMEなどなどMakefile Makefileソースファイル program1.c,program2.c,...nソースファイル m実行ファイル
基本的には、ディレクトリを複数作り、 各ディレクトリごとに 「nソースファイル 1実行ファイル」を採用することになります。 これは個別に対応してもらいましょうか。
(^^;)「各サブディレクトリで'make'を実行する」 ための"Makefile"を1つ書けばよいだけですね。カスタマイズ
- バージョン番号を日付ではなく、指定する数字にする。
- 18行め付近
"VER=数字"とする。- tar.gz にディレクトリを含める。
"tar:"の4行後ろの 'ln' コマンドを 'cp -R' に書き換える。残作業
- LaTeX のための Makefile。
- LEDA のための Makefile。
- nソースファイル m実行ファイル の Makefile。
参考資料