名前
make -
プログラム群を管理するための
GNU make ユーティリティ
書式
make [OPTION]... [TARGET]...
説明
make
ユーティリティの目的は、大きなプログラムの中の再コンパイルする必要がある部分を自動的に決定し、再コンパイルのためのコマンドを実行することです。
このマニュアルでは、GNU
が実装した make
の説明を行っています。
これは Richard Stallman と Roland McGrath
が書いたもので、
現在は Paul Smith
により維持されています。
例として C
言語のプログラムを用いていますが、これは
C
言語が最も一般的だからです。
make
は、シェルコマンドからコンパイラーを起動できるどんなプログラミング言語とでも組み合わせて使用できます。
実際、 make
の利用対象はプログラムだけに限りません。
make は、
あるファイルを書き換えたら、
その書き換えたファイルを元にして、
別のファイルも自動的に更新しなければならないような任意の作業で利用できます。
make
を使う準備として、
まず makefile
と呼ばれるファイルを書かねばなりません。
このファイルは、
プログラムを構成するファイル間の関係と、
各ファイルを更新するためのプログラムを記述したものです。
プログラムに関して言えば、
普通、
実行ファイルはオブジェクトファイルから更新され、
このオブジェクトファイルは、
ソースファイルのコンパイルによって生成されます。
適切な makefile
さえあれば、
ソースファイルを一部変更するたびに
make
という簡単なシェルコマンドを実行するだけで、
必要な再コンパイルはすべて行われます。
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/.