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
はデータベースに記録されているコマンドを実行する。
make
は
makefile
中のコマンドを実行して、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