MAKE

Section: LOCAL USER COMMANDS (1L)
Updated: 22 August 1989
Index JM Home Page roff page
 

名前

make - プログラム群を管理するための GNU make ユーティリティ  

書式

make [ -f makefile ] [ option ] ... target ...  

注意

このオンラインマニュアルは、 GNU make のドキュメントの一部を抜粋したものである。このファイルはあまり頻繁には 更新されない。というのも、GNU プロジェクトでは nroff が使われていない からである。完全かつ最新の内容のドキュメントを見るには、info ファイル make.info を参照すること。これは texinfo のソースファイル make.texinfo から生成される。  

説明

make ユーティリティの目的は、大きなプログラムの中の再コンパイルする必要があ る部分を自動的に決定し、再コンパイルのためのコマンドを実行することであ る。 このマニュアルでは、GNU が実装した make の説明を行っている。これは Richard Stallman と Roland McGrath が書いた ものである。 例としては C 言語のプログラムを用いているが、これは C 言語が最も一般的 だからである。 make は、シェルコマンドからコンパイラを起動できるどんなプログラミング言語と でも組み合わせて使用できる。 実際、 make の利用対象はプログラムだけに限られない。 make は、あるファイルを書き換えたら、その書き換えたファイルを元にして別のファ イルも自動的に更新しなければならないような任意の作業で利用できる。

make を使う準備をするためには、まず makefile と呼ばれるファイルを書かなければならない。このファイルは、プログラムを 構成するファイル間の関係と各ファイルを更新するためのプログラムを記述し たものである。プログラムの場合は普通、実行ファイルはオブジェクトファイ ルによって更新され、このオブジェクトファイルもまたソースファイルのコン パイルによって生成される。

適切な makefile さえあれば、ソースファイルを一部変更する度に

make

という簡単なシェルコマンドを実行するだけで、必要な再コンパイルが全て行 われる。 make プログラムは、makefile データベースとファイルの最終更新時刻を用いて、 更新する必要があるファイルを見つける。このようなファイルに対して、 make はデータベースに記録されているコマンドを実行する。

makemakefile 中のコマンドを実行して、1 つ以上のターゲット 名称 を更新する。この 名称 は普通はプログラムである。 -f が無い場合、 make は makefile として、 GNUmakefile, makefile, Makefile をこの順に参照する。

通常、ユーザが makefile として使うべきなのは、 makefile または Makefile である。 (筆者は Makefile を推奨する。なぜなら、この名前であれば常にディレクトリ表示の先頭近くに 現われるし、 README のような他の重要ファイルのすぐ近くに来るからである。) 最初にチェックされる名前である GNUmakefile は、大抵の場合は好ましくない。 この名前を使うべきなのは、GNU make に特化しており、他のバージョンの make では処理できない makefile を使う場合である。 makefile が `-' ならば、標準入力が読み込まれる。

make がターゲットを更新するのは、ターゲットが依存している必要ファイルがター ゲットより後に変更された場合と、ターゲットが存在しない場合である。  

オプション

-b
-m
これらのオプションは無視される。これらは他のバージョンの make との互換性のためのものである。
-C dir
makefile を読み込むなどの動作の前に、ディレクトリ dir に移動する。複数の -C オプションが指定されている場合、それぞれは前の指定に対する相対パスと解 釈される。例えば、 -C / -C etc は -C /etc と同じ意味である。このオプションは通常、 make を再帰的に呼び出す時に使われる。
-d
通常の処理情報に加えて、デバッグ情報を出力する。デバッグ情報に含まれる のは、再構築の対象となっているファイル、比較されるファイル時間とその結 果、実際に再構築する必要があるファイル、候補になっていたり実際に適用さ れる暗黙のルールなど、 make が動作を決めるために必要なもの全てである。
-e
環境変数から与える変数を指定する。これは makefile の変数よりも優先され る。
-f file
file を makefile として使用する。
-i
ファイルの再構築時に実行したコマンドで起きたエラーを全て無視する。
-I dir
インクルードする makefile を検索するディレクトリ dir を指定する。 複数の -I オプションを使って複数のディレクトリを指定した場合、ディレクトリの検索 は指定した順で行われる。 make の他のフラグに対する引き数と異なり、 -I に与える引き数は、フラグの直後に記述できる。 つまり、 -Idir という記述も -I dir と共に許される。 この記法を許すのは、C プリプロセッサの -I フラグとの互換性のためである。
-j jobs
同時に実行できるジョブ(コマンド)の数を指定する。 -j オプションが複数個指定された場合は、最後の指定が有効になる。引き数無しで -j オプションが与えられた場合、 make は同時に実行できるジョブの数を制限しない。
-k
エラーが起きてもできる限り実行を継続しようとする。 失敗したターゲットとそのターゲットに依存しているファイルは再生成されな いものの、そのターゲットに関する他の依存関係は処理することができる。
-l
-l load
他のジョブが動作しており、ロードアベレージが少なくとも load (浮動小数)ならば、新しいジョブ(コマンド)を実行しないことを指定する。 引き数無しの場合には、以前に指定した負荷の制限が取り除かれる。
-n
実行するコマンドの表示だけを行い、実際の実行を行わない。
-o file
file が依存先のファイルより古い場合であっても再構築を行わなず、 file が変更されても他のファイルの再構築を一切行わない。本質的には、そのファ イルは非常に古いものとして扱われ、規則が無視される。
-p
makefile を読み込んで得られたデータベース(規則と変数の値)を出力する。 特に指定しない限り、その後の動作は通常通りである。また、 -v オプションで得られるバージョン情報も出力する。 ファイルを全く再構築することなく、データベースの表示だけを行うには make -p -f/dev/nul を用いること。
-q
「問い合わせモード」で動作する。 コマンドを全く実行せず、何も表示しない。ただ、指定されたターゲットが既 に最新ならば終了ステータス 0 を返し、そうでなければ 0 でないステータス を返す。
-r
組み込みの暗黙的ルールを使用しない。 また、添字規則で使うデフォルトの添字のリストも全て消去する。
-s
静かに動作する。コマンドを実行する際に、コマンドの表示を行わない。
-S
-k オプションの影響を打ち消す。 このオプションが必要になるのは、 make を再帰的に用いているために -k オプションがトップレベルの make から MAKEFLAGS を通じて継承される場合や、環境変数 MAKEFLAGS で -k を設定している場合だけである。
-t
コマンドを実行せずにファイルにタッチする(実際にはファイルを変更せず、 最新の印を付ける)。このオプションを使うと見かけ上コマンドが実行された ことになり、後で起動する make をだますことができる。
-v
make プログラムのバージョンおよび著作権表示、作者のリスト、無保証であること の宣言を出力する。
-w
他の処理を行う前後に、作業ディレクトリを表示する。 再帰的な make コマンドが複雑な入れ子になっている状況でエラーを追跡する際に便利である。
-W file
ターゲット file が変更されたばかりのものとして動作する。 -n フラグを指定している場合、そのファイルを変更するとどうなるかが表示され る。 -n が指定されていない場合の動作は、 make の実行前に、指定されたファイルに対して touch を行った時とほぼ同じである。ただし、修正時刻が変更されるのは make の内部だけである点が異なる。
 

関連項目

The GNU Make Manual  

バグ

The GNU Make Manual の「問題点とバグ(Problems and Bugs)」の章を参照すること。  

著者

このオンラインマニュアルはスタンフォード大学の Dennis Morse 氏が寄付し たものである。その後 Roland McGrath が改訂している。


 

Index

名前
書式
注意
説明
オプション
関連項目
バグ
著者

This document was created by man2html, using the manual pages.
Time: 04:31:24 GMT, November 19, 2007