第1章 初めてLinux/UNIX系OSにふれる
エンジニアのための最初の一歩(9)

開発環境(2)

 

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に示します.

 

(表6)

暗黙の規則で使われるおもな変数

(約10Kバイト)

 

 もし,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に示します.

 

(図15)

autoconfとconfigureの構成([ ]は省略可能)

(約6Kバイト)

 


注:6 国*yaccとbisonは,どちらもソースコードの構文解析を行うプログラム.字句解析を行うプログラムとしてlexとflexがある.


Copyright 2000 
日樫 英孝/増田 佳泰/山岡 賢一/船木 陸議/ 羅 正華/森 友一朗/祐安 重夫/岩田 孝清/海老原 祐太郎/g新部 裕/ 齊藤 正伸

新刊のご案内


Copyright 1997-2001 CQ Publishing Co.,Ltd.