MAKE(1) | ユーザーコマンド | MAKE(1) |
名前¶
make - プログラム群を管理するための GNU make ユーティリティ
書式¶
make [OPTION]... [TARGET]...
説明¶
make ユーティリティの目的は、大きなプログラムの中の再コンパイルする必要がある部分を自動的に決定し、再コンパイルのためのコマンドを実行することです。 このマニュアルでは、GNU が実装した make の説明を行っています。 これは Richard Stallman と Roland McGrath が書いたもので、 現在は Paul Smith により維持されています。 例として C 言語のプログラムを用いていますが、これは C 言語が最も一般的だからです。 make は、シェルコマンドからコンパイラーを起動できるどんなプログラミング言語とでも組み合わせて使用できます。 実際、 make の利用対象はプログラムだけに限りません。 make は、 あるファイルを書き換えたら、 その書き換えたファイルを元にして、 別のファイルも自動的に更新しなければならないような任意の作業で利用できます。
make を使う準備として、 まず makefile と呼ばれるファイルを書かねばなりません。 このファイルは、 プログラムを構成するファイル間の関係と、 各ファイルを更新するためのプログラムを記述したものです。 プログラムに関して言えば、 普通、 実行ファイルはオブジェクトファイルから更新され、 このオブジェクトファイルは、 ソースファイルのコンパイルによって生成されます。
適切な makefile さえあれば、 ソースファイルを一部変更するたびに
という簡単なシェルコマンドを実行するだけで、 必要な再コンパイルはすべて行われます。 make プログラムは、 makefile 記述とファイルの最終更新時刻を用いて、 更新する必要があるファイルを見つけます。 そのファイルに対して、 make は makefile に書かれているコマンドを実行します。
make は makefile 内のコマンドを実行して、 1 つ以上のターゲット name を更新します。 この name は普通はプログラムです。 -f が無い場合、 make は makefile として、 GNUmakefile, makefile, Makefile をこの順に参照します。
通常、ユーザーが makefile として使うべきなのは、 makefile または Makefile です。 (推奨するのは Makefile です。 なぜなら、 この名前であれば、 常にディレクトリ表示の先頭近くに現われ、 README のような他の重要ファイルのすぐ近くに来るからです。) 最初にチェックされる名前である GNUmakefile は、たいていの場合は好ましくありません。 この名前を使うのは、GNU make に特化していて、他のバージョンの make では処理できない makefile を使う場合です。 makefile が `-' ならば、標準入力が読み込まれます。
make がターゲットを更新するのは、ターゲットが依存している必要ファイルがターゲットより後に変更された場合と、ターゲットが存在しない場合です。
オプション¶
- -b, -m
- このオプションは無視されます。 これは他のバージョンの make との互換性のためのものです。
- -B, --always-make
- 無条件にすべてのターゲットを make します。
- -C dir, --directory=dir
- makefile を読み込むなどの動作の前に、ディレクトリ dir に移動します。 複数の -C オプションが指定されている場合、それぞれは、 前の指定に対する相対パスとして解釈されます。 たとえば、 -C / -C etc は -C /etc と同じ意味です。 このオプションは通常 make を再帰的に呼び出す時に使われます。
- -d
- 通常の処理情報に加えて、 デバッグ情報を出力します。 デバッグ情報に含まれるのは、再構築の対象となっているファイル、 比較されるファイル時間とその結果、 実際に再構築する必要があるファイル、 候補になっていたり、 実際に適用される暗黙のルールなど、 make が動作を決めるために必要なものすべてです。
- --debug[=FLAGS]
- 通常の処理内容に加えてデバッグ情報を表示します。 FLAGS が省略された場合、 -d が指定された場合と同じ動作となります。 FLAGS には次の値を指定することができます。 a は全てのデバッグ情報を出力します (-d と同じ)。 b は基本的なデバッグ情報を出力します。 v は基本的なデバッグ情報をより詳細に出力します。 i は暗黙のルールを表示します。 j はコマンドの起動の詳細を出力します。 m は makefile の再 make 時にデバッグ情報を出力します。 n はそれまでのデバッグフラグをすべて無効化します。
- -e, --environment-overrides
- 環境変数から与える変数を指定します。 これは makefile の変数よりも優先されます。
- -E string, --eval string
- eval 関数を用いて string を解釈します。これはどの makefile の解析よりも先に行われます。
- -f file, --file=file, --makefile=FILE
- file を makefile として使用します。
- -i, --ignore-errors
- ファイルの再構築時に、 実行したコマンドで起きたエラーをすべて無視します。
- -I dir, --include-dir=dir
- インクルードする makefile を検索するディレクトリ dir を指定します。 複数の -I オプションを使って複数のディレクトリを指定した場合、 ディレクトリの検索 は指定した順で行われます。 make の他のフラグに対する引数と異なり、 -I に与える引数は、フラグの直後に記述できます。 つまり、 -Idir という記述も -I dir と共に許されます。 この記法を許すのは、C プリプロセッサの -I フラグとの互換性のためです。
- -j [jobs], --jobs[=jobs]
- 同時に実行できる jobs (コマンド) の数を指定します。 -j オプションが複数指定された場合は、 最後の指定が有効になります。 引数無しで -j オプションが与えられた場合、 make は同時に実行できるジョブの数を制限しません。
- -k, --keep-going
- エラーが起きても、 できる限り実行を継続しようとします。 失敗したターゲットとそのターゲットに依存しているファイルは、 再生成されないものの、そのターゲットに関する他の依存関係は処理することができます。
- -l [load], --load-average[=load]
- 他のジョブが動作していて、 ロードアベレージが少なくとも load (浮動小数)なら、 新しいジョブ (コマンド) を実行しないことを指定します。 引数無しの場合には、以前に指定した負荷の制限が取り除かれます。
- -L, --check-symlink-times
- シンボリックリンクとターゲットのうち、 最新の mtime を使用します。
- -n, --just-print, --dry-run, --recon
- 実行するコマンドの表示だけを行ない、 (特定の状況を除いては) 実際の実行を行ないません。
- -o file, --old-file=file, --assume-old=file
- file が依存先のファイルより古い場合であっても、 再構築を行わず、 file が変更されても、 他のファイルの再構築を一切行ないません。 実質的にそのファイルは非常に古いファイルとして扱われ、 規則が無視されます。
- -O[type], --output-sync[=type]
- -j を使って複数ジョブを並行で実行する場合、それぞれのジョブからの出力をばらばらに行うのではなく、個々のジョブ出力を取りまとめるようにします。type が未指定か target に指定されている場合、各ターゲットごとにレシピ全体の出力結果がまとめられます。type が line の場合、レシピ内の各コマンドラインの出力結果がまとめられます。type が recurse である場合、再帰呼び出しされた make 全体の出力結果がまとめられます。type が none の場合、同期をとった出力は無効化されます。
- -p, --print-data-base
- makefile を読み込んで得られたデータベース (規則と変数の値) を出力します。 特に指定しない限り、 その後の動作は通常通りです。 また、 -v オプションで得られるバージョン情報も出力します。 ファイルを全く再構築することなく、データベースの表示だけを行うには make -p -f/dev/null を使ってください。
- -q, --question
- 「問い合わせモード」で動作します。 コマンドを全く実行せず、何も表示しません。 ただ、指定されたターゲットが既に最新ならば終了ステータス 0 を返し、 そうでなければ 0 でないステータスを返します。
- -r, --no-builtin-rules
- 組み込みの暗黙的ルールを使用しません。 また、接尾辞規則で使うデフォルトの接尾辞のリストもすべて消去する。
- -R, --no-builtin-variables
- 組み込みの変数を一切定義しません。
- -s, --silent, --quiet
- 静かに動作します。 コマンドを実行する際に、コマンドの表示を行ないません。
- --no-silent
- -s オプションの機能をキャンセルします。
- -S, --no-keep-going, --stop
- -k オプションの機能をキャンセルします。
- -t, --touch
- コマンドを実行せずにファイルにタッチします (実際にはファイルを変更せず、 最新の印を付けます)。 このオプションを使うと見かけ上、 コマンドが実行されたことになり、 後で起動する make をだますことができます。
- --trace
- 各ターゲットの処理に関する情報が出力されます (ターゲット再ビルドの理由や、 再ビルドにあたって実行したコマンドが示されます)。
- -v, --version
- make プログラムのバージョンおよび著作権表示、作者のリスト、無保証であることの宣言を出力します。
- -w, --print-directory
- 他の処理を行う前後に、作業ディレクトリを表示します。 再帰的な make コマンドが複雑な入れ子になっている状況で、 エラーを追跡する際に便利です。
- --no-print-directory
- -w をオフにします。 -w が暗黙で指定される場合でもオフになります。
- -W file, --what-if=file, --new-file=file, --assume-new=file
- ターゲット file が変更されたばかりのものとして動作します。 -n フラグを指定している場合、 そのファイルを変更するとどうなるかが表示されます。 -n が指定されていない場合の動作は、 make の実行前に、 指定されたファイルに対して touch を行った時とほぼ同じです。 ただし、修正時刻が変更されるのは make の内部だけである点が異なります。
- --warn-undefined-variables
- 未定義の変数が参照された際に警告を出します。
終了ステータス¶
すべての makefile が正常に読み込まれ、ビルド対象のどのターゲットも失敗しなかった場合、 GNU make はステータス 0 で終了します。 -q フラグが使用され、 make がターゲットの再ビルドが必要と判断した場合には、 ステータス 1 が返されます。 何かエラーが発生した場合は、 ステータス 2 が返されます。
関連項目¶
make の完全なドキュメントは Texinfo マニュアルとしてメンテナンスされています。info と make の両プログラムが適切にインストールされていれば、以下のコマンド
- info make
を実行して完全なマニュアルを参照できます。
バグ¶
The GNU Make Manual の「問題点とバグ (Problems and Bugs)」の章を参照してください。
著者¶
このオンラインマニュアルはスタンフォード大学の Dennis Morse 氏が寄付したものです。 さらなる改訂が Mike Frysinger から提供されました。 その後 Roland McGrath が改訂しました。 現在は Paul Smith が保守を行っています。
著作権¶
Copyright © 1992-1993, 1996-2020 Free Software Foundation, Inc. This file is part of GNU make.
GNU Make is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version.
GNU Make is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/.
2016/02/28 | GNU |