make(1) FreeBSD 一般コマンドマニュアル

make

前のページ 上に戻る 次のページ

make


          [-f makefile] [-I directory] [-j max_jobs] [-m directory]
          [-V variable] [variable=value] [target ...]


解説

     make は、プログラムのメンテナンスを単純化するためのツールです。その入力は
     ファイルの生成とプログラムとの間の依存関係を指定するリストが記述されてい
     ます。カレントディレクトリまたは特別なオブジェクトディレクトリ `(.OBJDIR'
     参照) のどちらか一方において `makefile' と `Makefile' の最初に見つかった
     方から、この指定のリストが読み込まれます。 `.depend' というファイルが見つ
     かれば、それも読み込みます (mkdep(1) を参照) 。

     本マニュアルはリファレンスのためのみのドキュメントです。 make と makefile
     に関する詳しい紹介は Make - A Tutorial を参照してください。

     オプションは以下のとおりです。

     -B      シーケンス中の依存行のソースを作成するために、各コマンドに対して
             1 つのシェルを実行する、バックワード互換モードで実行しようとしま
             す。このオプションは -j が使用されない限り、デフォルトで有効にな
             ります。

     -D variable
             大域変数 variable を 1 と定義します。

     -d flags
             デバッグモードを有効にし、 make が表示するデバッグ情報の種類を指
             定します。引数 flags には、以下のうち 1 つ以上を指定できます。

             A       すべてのデバッグ情報を出力します。他のフラグをすべて指定
                     したことと等価です。

             a       アーカイブ検索とキャッシュに関する情報を表示します。

             c       条件評価に関する情報を表示します。

             d       ディレクトリ検索とキャッシュに関する情報を表示します。

             f       for ループの実行に関するデバッグ情報を表示します。今のと
                     ころは何もしていません。

             g1      処理を行う前に、入力のグラフを表示します。

             g2      すべての処理を行ったあと、あるいはエラーにより終了する前
                     に入力のグラフを表示します。

             j       複数のシェルを起動する場合の情報を表示します。

             l       @ がコマンドに前置されていようといまいと、また他の「静
                     寂」フラグの有無に関わらず、Makefile のコマンドを表示しま
                     す。これは「やかましい」動作としても知られています。

             m       ターゲットの作成と変更日付に関する情報を表示します。

     -f makefile
             デフォルトの `makefile' と `Makefile' のかわりに、読み込むファイ
             ルを指定します。もし makefile が `-' なら標準入力から読み込みま
             す。複数のファイルが指定可能で、指定した順に読み込まれます。

     -I directory
             makefile と、インクルードされる makefile を検索するためのディレク
             トリを指定します。システムで定義してある makefile のあるディレク
             トリ (または、複数のディレクトリ; -m オプションを参照) は自動的に
             リストに含まれ、検索されます。

     -i      makefile から実行されたシェルコマンドが 0 でない終了ステータスを
             返しても無視します。makefile 中でコマンドの先頭に `-' を指定する
             のと同じです。

     -j max_jobs
             make が同時に起動できるジョブの数を指定します。 B フラグを指定し
             なければ、互換性モードはオフになります。

     -k      エラーが発生しても処理を続行します。ただし、発生したエラーによっ
             て作成が不能になったターゲットに依存したターゲットに関しては処理
             が中断されます。

     -m directory
             <...> 形式で読み込まれる sys.mk や makefile を検索するためのディ
             レクトリを指定します。複数のディレクトリを検索パスに加えることが
             できます。このパスは、デフォルトのシステムインクルードパス
             /usr/share/mk を上書きします。さらに、システムインクルードパスを
             "..." 形式のインクルードによって追加することができます( -I オプ
             ションを参照)。

     -n      make が実行するであろうコマンド内容の表示のみを行い、実行はしませ
             ん。

     -P      並行して動作するジョブを一緒に混ぜて出力するのでなく、与えられた
             ジョブの順番をそろえて、ジョブが終了するまで表示しません。このオ
             プションは -j が使われた時のみ効果を持ちます。

     -q      いっさいのコマンドを実行せず、指定されたターゲットが最新のもので
             あれば 0 を、そうでなければ 1 を終了ステータスとして返します。

     -r      システムの makefile で定義された組み込みのルールを使用しません。

     -S      エラーが起きた時に処理を中止します。デフォルトの動作です。このオ
             プションは再帰的な構築の際に -k オプションを打ち消すのに必要とな
             ります。

     -s      実行するコマンドを表示しません。makefile のなかで、コマンドの先頭
             に `@' を指定するのと同じです。

     -t      makefile で指定されたターゲットを作り直すのではなく、ターゲットを
             作成するか、あるいは最終更新日付を現在の時刻に設定することによ

     variable=value
             変数 variable の値を value に設定します。

     makefile には 7 種類の行があります: 依存関係記述、シェルコマンド、変数代
     入、インクルード文、条件命令、for ループ、コメントです。

     一般に、行は行末にバックスラッシュ (`\') を置くことにより次行へ継続させる
     ことができます。この場合、バックスラッシュ直後の改行と、次の行の先頭の空
     白部分は 1 つの空白に置き換えられます。


ファイル依存関係記述

     入力ファイルにおける依存関係記述行は、1 つ以上のターゲット、オペレータ、
     0 個 以上のソースからなります。これは、ターゲットがソースに ``依存'' して
     いるという関係を定義しており、通常は、ソースからターゲットが作成されま
     す。ターゲットとソースとの厳密な関係はオペレータによって、両者間に指定し
     ます。オペレータには以下の種類があります。

     :     ターゲットの最終更新日付が、いずれかのソースの最終更新日付よりも古
           いものであれば、ターゲットは古いものであり、作り直されるべきものと
           判断されます。別の行でこのオペレータによる同じターゲットに関するソ
           ースの記述があれば、それらはすべて 1 つにまとめられます。ターゲット
           の作成中に make が中断されると、ターゲットは削除されます。

     !     ターゲットはつねに作り直されます。ただし、作り直されるのは、すべて
           のソースが検査され、必要と判断されたソースが作り直されたあとです。
           このオペレータによる同じターゲットに関するソースの記述が別の行にも
           あれば、それらはすべて 1 つにまとめられます。ターゲットの作成中に
           make が中断されると、ターゲットは削除されます。

     ::    ソースが指定されていなかった場合、つねにターゲットは作り直されま
           す。指定されていた場合にはソースのいずれかがターゲットよりも新しい
           時だけターゲットは作り直されます。本オペレータでは、別の行において
           同じターゲットに関するソースの記述があっても 1 つにまとめません。タ
           ーゲットの作成中に make が中断されても、ターゲットは削除されませ
           ん。

     ターゲットとソースは、シェルのワイルドカード表記として `?', `*', `[]',
     `{}' を含むことができます。 `?', `*', `[]' の表記は、ターゲットまたはソー
     スの最後の要素として記述でき、存在するファイルを指定するものでなければな
     りません。表記 `{}' はファイルが存在しなくてもかまいません。シェルのよう
     に辞書順に並べられて展開されることはなく、ファイルシステム上に並んでいる
     順番のまま行われます。


シェルコマンド

     ターゲットは、シェルコマンドの列と関連付けることができ、通常はそれによっ
     てターゲットを作成します。これに含まれる各コマンドは、 必ず行頭のタブに続
     けて記述します。同一のターゲットに対して複数の依存記述行がある場合、 `::'
     オペレータを使用したのでなければ、それらのうちの 1 つにのみコマンド行を続
     けることができます。

     コマンドラインの先頭もしくは先頭 2 文字が `@' や `-' ならば、コマンドは特
     別な扱いを受けます。 `@' は、コマンドが実行前に、コマンド内容の表示を抑制
     :=      右辺を展開した値を代入します。つまり、変数に代入する前に値の展開
             を行います。通常、値の展開は代入時には行われず、変数が参照される
             ときに行われます。

     !=      右辺を展開した値をシェルに実行させ、実行結果を左辺の変数に代入し
             ます。結果のなかに含まれる改行は空白に置き換えられます。

     いずれの場合も、値の前にある空白は無視されます。値が追加される場合、変数
     の直前の値と追加する値との間に空白が挿入されます。

     変数は、ドル記号 (`$') に続いて中括弧 (`{}') または小括弧 (`()') で囲まれ
     た変数名を置くことにより展開されます。もし変数名が 1 文字なら、変数名を囲
     む括弧は省略できますが、このような省略形は推奨できません。

     変数置換は、変数が用いられている場所により、 2 つの別々のタイミングで行わ
     れます。依存関係記述行で用いられた変数は、その行が読み込まれたときに展開
     されます。シェルコマンド内で用いられた変数は、シェルコマンド実行時に展開
     されます。

     変数には、優先度に従って、4 つの異なるクラスがあります:

     環境変数
             make の環境中で有効な変数

     グローバル変数
             makefile とインクルードされた makefile 内で有効な変数。

     コマンドライン変数
             コマンドラインで指定された変数。

     ローカル変数
             あるターゲットのみに対して定義される変数。ローカル変数には、以下
             の 7 種類があります:

             .ALLSRC   このターゲットに対するすべてのソースのリスト。 `>' も同
                       じです。

             .ARCHIVE  アーカイブファイル名。 `!' も同じです。

             .IMPSRC   ターゲット名に変換するのに使用するソースのファイル名ま
                       たはパス名 ( ``暗黙の'' ソース)。 `<' も同じです。

             .MEMBER   アーカイブのメンバ。 `%' も同じです。

             .OODATE   ターゲットよりも新しいソースのリスト。 `?' も同じです。

             .PREFIX   ターゲットのディレクトリ名と拡張子を取り除いた名前。
                       `*' も同じです。

             .TARGET   ターゲットの名前。 `@' も同じです。

             短い形式 `@', `!', `<', `%', `'?, `>', `*' は互換性のためのもので

     .CURDIR    make が実行されたディレクトリ。 make.CURDIR を、 getcwd(3)
                から渡される公式なパスに設定します。

     .OBJDIR    ターゲットを作成するディレクトリへのパス。起動時に、 make はタ
                ーゲットファイルを置く代わりのディレクトリを検索します。 make
                はこの特別なディレクトリに移動することを試み、 makefile がカレ
                ントディレクトリになかった場合にはこのディレクトリで検索されま
                す。以下の順番でディレクトリは試されます:

                1.   ${MAKEOBJDIRPREFIX}/`pwd`
                2.   ${MAKEOBJDIR}
                3.   obj.${MACHINE}
                4.   obj
                5.   /usr/obj/`pwd`

                最初に make が移動に成功したディレクトリが使われます。もし
                MAKEOBJDIRPREFIX または MAKEOBJDIR のどちらかがが環境で設定さ
                れていて make が対応するディレクトリに移動できなかった場合は、
                リストの残りをチェックすることなしにカレントディレクトリが使わ
                れます。それらが定義されておらず make が残った 3 つのディレク
                トリのいずれにも移動できなかった場合、カレントディレクトリが使
                われます。

     .MAKEFLAGS
                環境変数 MAKEFLAGS は、 make のコマンドラインにて指定されるあ
                らゆるものを含みます。その中身は MAKEFLAGS 変数に記憶されま
                す。 make のコマンドラインにて指定されるあらゆるものは
                MAKEFLAGS 変数に追加され、 make が実行する全プログラムの環境に
                この変数が MAKEFLAGS として組み込まれます。

     MFLAGS     下位互換性のために .MAKEFLAGS の同意語として提供されます。

     PWD        現在のディレクトリへの別のパス。 WANT_ENV_PWD が定義されて構築
                された場合にサポートされます。 make は普通、 `.CURDIR' を
                getcwd(3) で得られた正式なパスに設定します。しかしながら、環境
                変数 PWD が設定されており、与えられたパスがカレントディレクト
                リの時、 make は、 `.CURDIR' を PWD の値に設定します。 make が
                実行している全てのプログラムに対しては、 PWD に `.OBJDIR' の値
                を常に設定します。

     .TARGETS   make が現在構築しているターゲットのリスト。

     .INCLUDES  .INCLUDES 特殊ターゲット参照。

     .LIBS      .LIBS 特殊ターゲット参照。

     MACHINE    MACHINE 環境変数、または定義されていない場合は uname(3) によっ
                て得られる、 make が動作しているマシンアーキテクチャの名称。

     MACHINE_ARCH
                make のコンパイル時に定義された make がどのマシンアーキテク

     置きます。

     C/pattern/replacement/[1g]
                 C 修飾子は S 修飾子に似ていますが、単純な置換の代りに正規表現
                 ( regex(3) を参照してください) を旧文字列に使用することと、
                 ed(1) スタイルの置換文字列を新文字列に使用することが違いま
                 す。通常、値中の各語の最初のパターンを置換します。 `1' 修飾子
                 は、置換対象を最大 1 語に制限します。 `g' 修飾子は、置換対象
                 の個数が、語 (または複数の語) 中で見つかる検索パターン数と同
                 じになるようにします。 `1' と `g' は直交していることに注意し
                 てください。前者は、複数の語が影響を受け得るか否かを指定しま
                 すが、後者は、影響を受ける各語の中で複数の置換が発生し得るか
                 否かを指定します。

     E           変数中の各単語を拡張子で置換します。

     H           変数中の各単語を、パスの最後の要素を除いた部分で置換します。

     L           変数を小文字に変換します。

     Mpattern    pattern にマッチする単語を選択します。標準的なワイルドカード
                 (`*', `?', `[]') が使用できます。ワイルドカード文字はバックス
                 ラッシュ (`\') によりエスケープできます。

     Npattern    pattern にマッチしない単語を選択します。それ以外は M と同様で
                 す。

     Q           変数中のすべてのシェルメタ文字をクォートし、再帰起動される
                 make に安全に渡せるようにします。

     R           変数中の各単語から拡張子を取り除きます。

     S/old_string/new_string/[g]
                 変数の値で各単語中の最初の old_stringnew_string に置換し
                 ます。もし、最後のスラッシュのあとに `g' が指定されていれば、
                 各単語中に出現したすべての old_stringnew_string に置換さ
                 れます。 old_string がキャレット (`^') で始まっているなら、
                 old_string を各単語の先頭からマッチさせることを意味します。
                 old_string がドル記号 (`$') で終わっているなら、その文字列を
                 各単語の終端にマッチさせることを意味します。 new_string 中の
                 アンパサンド (`&') は old_string に置換されます。修飾文字列の
                 区切りにはどんな文字を使ってもかまいません。 `^' , `$' , `&'
                 と区切り文字はバックスラッシュ (`\') によりエスケープできま
                 す。

                 old_stringnew_string 中では通常の変数置換が行われます。た
                 だし、ドル記号 (`$') の展開を抑制するためには、通常のドル記号
                 の前置ではなく、バックスラッシュでエスケープします。

     T           変数中の各単語をパスの最後の要素で置換します。

     old_string=new_string

     .include <file>

     .include "file"
             指定した makefile をインクルードします。アングルブラケットが使用
             された場合は、 makefile はシステムの makefile ディレクトリにある
             ものを用います。ダブルクォートが使用された場合は、 makefile が存
             在するディレクトリ、 -I オプションで指定されたディレクトリ、シス
             テムの makefile ディレクトリの順に検索します。

     .undef variable
             指定したグローバル変数を未定義とします。グローバル変数のみ、未定
             義とすることができます。

     .error message
             makefile の処理を即座に終了します。 makefile のファイル名と、どの
             行でエラーとなったかと、指定したエラーメッセージとを、標準出力に
             表示し、 make は終了コード 1 で終了します。

     条件文は Makefile のどの部分を処理するのかを判定するために使用します。 C
     プリプロセッサがサポートする条件文と同様に使用されます。以下の条件文がサ
     ポートされています:

     .if [!]expression [operator expression ...]
             式の値をテストします。

     .ifdef [!]variable [operator variable ...]
             変数の値をテストします。

     .ifndef [!]variable [operator variable ...]
             変数の値をテストします。

     .ifmake [!]target [operator target ...]
             ターゲット target が作成中かどうかをテストします。

     .ifnmake [!]target [operator target ...]
             ターゲット target が作成中かどうかをテストします。

     .else   最後に行った条件文の意味を逆にします。

     .elif [!]expression [operator expression ...]
             `.else' と直後の `.if' を対にしたものです。

     .elifdef [!]variable [operator variable ...]
             `.else' と直後の `.ifdef' を対にしたものです。

     .elifndef [!]variable [operator variable ...]
             `.else' と直後の `.ifndef' を対にしたものです。

     .elifmake [!]target [operator target ...]
             `.else' と直後の `.ifmake' を対にしたものです。

     す。

     式 expression は、以下のいずれかの形式です:

     defined     引数として変数名をとり、変数が定義されていれば真となる。

     make        引数としてターゲット名をとり、そのターゲットが make のコマン
                 ドライン引数に指定されているか、デフォルトのターゲット (明示
                 的なものも暗黙的なものも含む。 .MAIN の項を参照) として宣言さ
                 れている場合に真となる。

     empty       引数として変数名 (と修飾子) をとり、展開した結果が空文字列な
                 らば真となる。

     exists      引数としてファイル名をとり、ファイルが存在すれば真となる。
                 ファイルはシステム検索パス (.PATH の項を参照) にそって検索さ
                 れる。

     target      引数としてターゲット名をとり、ターゲットが定義されているなら
                 真となる。

     条件式 expression としては、数値あるいは文字列の比較を用いることもできま
     す。比較オペレータの両辺は、変数展開が適用されたあとに比較されます。値が
     0x で始まるなら 16 進数であると解釈し、さもなければ 10 進数と解釈しま
     す。8 進数はサポートしていません。標準的な C 言語の関係オペレータは全て利
     用可能です。変数展開後、 `==' または `!=' の左辺値または右辺値のいずれか
     が数値とは認められない場合、文字列として比較を行います。関係オペレータが
     指定されなかった場合、展開された変数と 0 とを比較します。

     条件式を評価中に、評価できない単語が出現した場合は、条件式の形式によっ
     て、 ``make'' または ``defined'' オペレータを適用します。条件式が
     `.ifdef' または `.ifndef' ならば ``defined'' を、条件式が `.ifmake' また
     は `.ifnmake' ならば ``make'' を、それぞれ適用します。

     条件式が真と評価されたなら、makefile の解析はそのまま続行されます。偽と評
     価されたなら、 `.else' または `.endif' が見つかるまで makefile の解析をス
     キップします。

     for ループは、いくつかのルールを一連のファイルに適用するのによく用いられ
     ます。以下がループの形式です:

     .for variable in expression
     <make-rules>
     .endfor

     expression は評価されたあとに単語に分解され、それぞれを variable に代入し
     ながら、 make-rules 部分を繰り返し展開します。


コメント

     コメントはハッシュ記号 (`#') から始まり、シェルコマンド行以外のどこにでも
     置くことができます。コメントは改行で終わります。

                 ているものとみなします。

     .PRECIOUS   通常 make が中断されたときは、作成途中のターゲットは削除され
                 ます。本ソースを指定することで、そのターゲットを削除しなくな
                 ります。

     .SILENT     指定されたターゲットに関連づけられたシェルコマンドを実行する
                 ときにエコーを行いません。シェルコマンドの先頭に `@' を指定し
                 たのと等価です。

     .USE        指定されたターゲットをマクロ的に扱います。 .USE をソースに持
                 つターゲット (以下ではマクロと呼びます) が別のターゲットのソ
                 ースとなった場合、そのターゲットはコマンド、ソース、属性(
                 .USE は除く) をマクロから受け取ります。もし、すでにターゲット
                 にコマンドが指定されていた場合は、マクロのコマンドが追加され
                 ます。

     .WAIT       特別な .WAIT ソースが依存関係行に現れた時には、ソースはその行
                 中でソースが作成されるまで待ちます。ループは検出されず、ルー
                 プ形式のターゲットは単に無視されます。


特殊ターゲット

     特殊ターゲットは、他のターゲットとともに使用してはいけません。すなわち、
     依存関係記述行の唯一のターゲットとして指定する必要があります。

     .BEGIN      本ターゲットに指定されたシェルコマンドは他の処理に先立って実
                 行されます。

     .DEFAULT    これは、作成方法がわからないどんなターゲットにも適用される
                 .USE ルールのようなものです。シェルスクリプトのみを使用しま
                 す。 .DEFAULT に指定されたコマンド中の .IMPSRC 変数はターゲッ
                 ト自身の名前に置換されます。

     .END        本ターゲットに指定されたシェルコマンドは、他のすべての処理の
                 終了後に実行されます。

     .IGNORE     指定されたソースに .IGNORE 属性を付与します。もしソースが指定
                 されていなければ、 -i オプションを指定したのと同じ意味になり
                 ます。

     .INCLUDES   ソースファイル中で include される可能性のあるファイルの拡張子
                 のリスト。拡張子はあらかじめ .SUFFIXES で宣言されていなければ
                 なりません; このように宣言された拡張子は自身の検索パス( .PATH
                 参照) にそれぞれ -I フラグを前に付けた状態で .INCLUDES 特殊変
                 数に設定されます。

     .INTERRUPT  make が中断されたとき、本ターゲットに指定されたコマンドを実行
                 します。

     .LIBS       .INCLUDES が include ファイルに対して行なうことと同じことをラ
                 イブラリに対して行ないます。ただし -L フラグが使われます。


     .ORDER      シーケンス中の名前付きターゲットが作成されます。

     .PATH       カレントディレクトリに発見できなかったときのファイルの検索パ
                 スを、本ターゲットのソースとして指定します。ソースが指定され
                 なかった場合、以前に設定されていたディレクトリが無効になりま
                 す。可能であれば .PATH を利用する方が、 VPATH 変数を利用する
                 よりも好まれています。

     .PATHsuffix
                 カレントディレクトリに発見できなかったときの suffix のついた
                 ファイルの検索パスをソースとして指定します。 make はファイル
                 が見つからなかった場合に、デフォルトパスよりも先に、まず suf-
                 fix の付いた検索パスで探します。この形式は .LIBS.INCLUDES
                 が動作するために必要です。

     .PHONY      .PHONY 属性を指定したソースに適用します。この属性を持ったター
                 ゲットはいつでも更新されていると考えられます。

     .PRECIOUS   指定されたソースに .PRECIOUS 属性を付与します。もし、ソースが
                 指定されなかった場合、すべてのターゲットに .PRECIOUS 属性を与
                 えます。

     .SILENT     指定されたソースに .SILENT 属性を付与します。もし、ソースが指
                 定されなかった場合、ファイル中のすべてのコマンドに .SILENT 属
                 性を与えます。

     .SUFFIXES   ソースにおいて、 make で用いる拡張子を指定します。ソースが指
                 定されなかった場合は、以前の指定が無効になります。


互換性

     make の古いバージョンは MAKEFLAGS の代わりに MAKE を使っていました。この
     機能は POSIX への互換性のために削除されました。内部変数 MAKE.MAKE と
     同じ値が代入されます ; この機能は将来削除されるかもしれません。

     make のたくさんの秘密にされいている機能の多くは、より多くの互換性を保つた
     めに使用を避けるべきです。


環境変数

     make は次の環境変数の値を用います: MACHINE, MAKE, MAKEFLAGS, MAKEOBJDIR,
     MAKEOBJDIRPREFIX, PWD


関連ファイル

     .depend                     依存関係リスト
     Makefile                    依存関係リスト
     makefile                    依存関係リスト
     obj                         オブジェクトディレクトリ
     sys.mk                      システム定義の makefile (他のすべてのファイル
                                 よりも前に処理されます。これには makefileMakefile も含まれます)
     /usr/share/mk               システム定義の makefile が置かれるディレクト
                                 リ

     `.if ${VAR} = string' のように書かなければなりません。他の書き方では動き
     ません。

     for ループはテストされる前に展開されるため、

     .for TMACHINE in ${SHARED_ARCHS}
     .if ${TMACHINE} = ${MACHINE}
          ...
     .endif
     .endfor
     のような断片は動きません。他の方法を使って書き直す必要があります。


関連項目

     mkdep(1), make.conf(5)

     PMake - A Tutorial.  /usr/share/doc/psd/12.make にあります。


歴史

     make は Version 7 AT&T UNIX において追加されました。

FreeBSD 4.4                     March 19, 1994                     FreeBSD 4.4

ABELNET VPSサービス