初心者のためのMakefile関連事項

                        2000.06.06更新 c言語のソースプログラムを作り、実行するにはコンパイルということを行う。 例 cc test.c ごく初歩的な段階ではこれでよいが、実用になるようなプログラムを書くにはもっと いろいろなことが必要になる。例えば実行プログラムの名前を付けたり、コンパイル 時に最適コード作成オプションを付けたり、ライブラリプログラムの使用、分割コン パイルなど(ここではその意味はまだ分からなくても仕方ない)。 これらを行うには複雑なパラメータを打ち込む必要がある。一々打ち込むのは大変で ある。料理を作るときは手順を書いたもの(レシピ)を用いると便利である。すなわ ち、何を材料としてどのように作ればよいのか書いてあるのがレシピである。計算機 にもそれに相当するものがある。それがMakefileである。 コマンドレベルでmakeと打ち込むと(カレントディレクトリにある)Makefileに書い てあることに従ってコマンドが実行され実行プログラムを作ってくれる(一般にはも っと沢山のことができる)。 Aを作りたいとき、材料としてBが必要で、Bを作るにはさらにCが必要とする。この ような関係を依存性があるという。makeは依存性を判断して必要なものを作ってく れるので、わずらわしい手間をかなり省くことができる。 初心のうちはMakefileはサンプルに従うのがよい。中身が理解できるようになったら 徐々に変更を加えるのがよい。 makeの途中でたとえば "./visio.h", line 7: エラー: #include: ファイル が見つかりません というようなメッセージが出ることがある。これは必要なインクルードファイルが見 つからないことを意味している。Makefileの中に CPPFLAGS=-I/usr/local/X11R6.3/include -I/usr/local/X11/include/X11 のような行があり、これが適切に指定されていないと、この種のメッセージが出る。 この指定は環境(計算機)ごとに異なる。そこで、下記に近辺の計算機ごとに適合 する(はずの)Makefileを例として上げるので参考にしてほしい。なお、インクルー ドファイルを自分で探すには、探しているファイルのありそうな場所の見当をつけて (下の例では/usr)、 du -a /usr/* | grep rasterfile.h のようにすればよい。 Makefile-io Makefile-titan Makefile-binder Makefile-unxsvr 話が前後するが、c言語を用いてひとまとまりのプログラムを作ろうとするとき、共 通的な変数やマクロを定義しておくと都合がよい。これがインクルードファイルで、 #include <stdio.h>のように引用する。 インクルードファイルは、基本入出力を定めるstdio.hのように必ず引用しなくては ならないもののほかライブラリを用いるとき必要になるもの、ユーザが定義するもの などがある。 これらの置き場所は標準的にきまっている(例/usr/include)。標準的な場所にあ るとき#include <stdio.h>のように引用する。そうでないとき、 #include "file.h" のように直接ファイルのあり場所を指定する型式もある。 また、CPPFLAGS=-I/usr/local/X11R6.3/include のように、あるディレクトリ の下を探すように指示することもある。 ライブラリについて、options = -lX11 -lm のように-lオプションが、ライブラリを 用いることをローダ(ld)に指示する。 -lx においてlxは、 libx.a という名( x は文字列)のライブラリの略称を示す。ラ イブラリを探す際、 ld は最初に -Lオプションで指定されたディレクトリ内を探 し、次 に標準ディレクトリ で あ る /lib/usr/lib, /usr/local/lib を探す。ライブラリのサ ーチはそのライブラリ名が現れた時点で行われるため、 -l オプションの指定位置は重要な 意味を持つ、よってその位置が適切でないと正しくリンクされない。 戻る 大島ホームページ 質問・連絡は oshima%kaiyodai.ac.jpまで