MAKE(1)

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

書式
make [ -f makefile ] [ options ] ... [ targets ] ...

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

説明

make ユーティリティの目的は、大きなプログラムの中の再コンパイルする必要がある部分を自動的に決定し、再コンパイルのためのコマンドを実行することである。このマニュアルでは、GNU が実装した make の説明を行っている。これは Richard Stallman と Roland McGrath が書いたもので、現在は Paul Smith により維持されている。例としては 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 との互換性のためのものである。

-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 時にデバッグ情報を出力する。

-e, --environment-overrides
    環境変数から与える変数を指定する。これは 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 が変更されても他のファイルの再構築を一切行わない。本質的には、そのファ イルは非常に古いものとして扱われ、規則が無視される。

-p, --print-data-base
    makefile を読み込んで得られたデータベース(規則と変数の値)を出力する。 特に指定しない限り、その後の動作は通常通りである。また、 -v オプションで得られるバージョン情報も出力する。 ファイルを全く再構築することなく、データベースの表示だけを行うには make -p -f/dev/nul を用いること。

-q, --question
    「問い合わせモード」で動作する。 コマンドを全く実行せず、何も表示しない。ただ、指定されたターゲットが既 に最新ならば終了ステータス 0 を返し、そうでなければ 0 でないステータス を返す。

-r, --no-builtin-rules
    組み込みの暗黙的ルールを使用しない。 また、添字規則で使うデフォルトの添字のリストも全て消去する。

-R, --no-builtin-variables
    組み込みの変数を一切定義しない。

-s, --silent, --quiet
    静かに動作する。コマンドを実行する際に、コマンドの表示を行わない。

-S, --no-keep-going, --stop
    -k オプションの影響を打ち消す。 このオプションが必要になるのは、 make を再帰的に用いているために -k オプションがトップレベルの make から MAKEFLAGS を通じて継承される場合や、環境変数 MAKEFLAGS で -k を設定している場合だけである。

-t, --touch
    コマンドを実行せずにファイルにタッチする(実際にはファイルを変更せず、 最新の印を付ける)。このオプションを使うと見かけ上コマンドが実行された ことになり、後で起動する make をだますことができる。

-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 が返される。

関連項目
The GNU Make Manual

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

著者
このオンラインマニュアルはスタンフォード大学の Dennis Morse 氏が寄付し たものである。その後 Roland McGrath が改訂した。さらなる改訂が Mike Frysinger から提供された。

著作権
Copyright (C) 1992, 1993, 1996, 1999, 2007 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/.