1.3開発環境(その2) make(その2) 変数 Makefileの中で変数を定義することができます.helloがhello.oとbye.oの二つのオブジェクトから作成されるのであれば,以下のような規則を書くことができます. OBJECTS = hello.o bye.o hello : $(OBJECTS) gcc -o hello $(OBJECTS) 変数を使うことで無駄な繰り返しを避けることができ,変更があった場合にも1箇所の修正ですみます. 暗黙の規則と変数 makeには,暗黙の規則がデータベースとして登録されています.そして,暗黙の規則を使うとMakefileは簡単になります.暗黙の規則で定義されるおもな変数を表6に示します.
もし,helloがhello.cだけで作成できるとすると, $ make hello を実行することで,makeは以下のように自動的にコンパイルして,helloという名前の実行可能なファイルを作成します. cc hello.c -o hello makeは,暗黙の規則を使ってhelloを作成するにはどうすればよいかを推測し,コンパイラを起動してくれます.暗黙の規則では,CコンパイラはCCという変数になっています.そこで,makeの引き数でCCを指定すればCコンパイラを変更することができます. $ make CC=gcc hello もし,デバッグ用のバイナリを作成するのであれば,CFLAGSに-gオプションを指定します. $ make CFLAGS=-g hello なお,暗黙の規則と変数は,-pオプションを使って表示することができます. $ make -p Makefileの書き方(慣習) Makefileでは,コマンドやオプションを直接指定せず,変数を使用するべきです.とくに暗黙の規則で使われている変数がある場合,これを使うことで,他の人が書いたMakefileとの協調性も高くなります.先に示した例は,以下のように変更できます. OBJECTS = hello.o bye.o hello : $(OBJECTS) $(CC) -o hello $(LDFLAGS) $(OBJECTS) Makefileにはプログラムのビルドだけでなく,インストール,アンインストールのためのターゲットや,makeが作成したオブジェクトやバイナリを削除するターゲットも用意します. makeの応用 makeは,プログラムの開発だけに使われるわけではありません.時間に依存して異なる処理をしたい場合には,シェルよりもmakeのほうが適しています.たとえば,ファイルの間に依存関係がある場合に,更新処理をまとめて行わせるようなことができます. autoconf(その1) autoconfは,UNIXライクなシステムの間でポータブルなソースコードのパッケージを作成するためのツールです. たとえば,System V,BSD,Linuxの間でも一部の機能は欠けていたり,システムコールに使われる構造体が異なっています. また,同じOSであってもライブラリがインストールされる場所が異なっているとか,パーサジェネレータがyaccではなくbison注6であるような場合もあります.ビルドまで含めたポータブルなパッケージを実現するには,単純なMakefileでは不可能です. X Window Systemでは,これらの違いをImakeとテンプレートファイルで実現していますが,一方,autoconfではパッケージが必要とする機能をビルドするホストで動的に調べ,Makefileを生成するconfigureというシェルスクリプトで実現します. autoconfとconfigureによるMakefile作成の流れを図15に示します.
注:6 国*yaccとbisonは,どちらもソースコードの構文解析を行うプログラム.字句解析を行うプログラムとしてlexとflexがある. Copyright 2000 |
|
Copyright 1997-2001 CQ Publishing Co.,Ltd.