makeコマンドのオプションについて その2

スポンサーリンク

makeコマンドのオプションについての続きになります。

makeコマンドのオプションについて
makeコマンドのオプションの一部のまとめになり、コマンド例とその実行結果を紹介しています。また、ここでのオプションはGNU makeでのオプションになります。 makeについては以下の記事で紹介しています。 makeコマンドのオプションに...

 

また、makeについては以下の記事で紹介しています。

make - ビルド作業を自動化するツールの使い方
makeは、makefileというファイルを作成し、makeコマンドを実行することで自動的にファイルを生成できます。makeは主にプログラムのビルド作業に利用されます。また、この記事で利用しているmakeはGNU makeになります。 ma...

スポンサーリンク

実行するコマンドを表示しない
(-sオプション)

-sオプションを用いると、makeで実行するコマンドのエコーを表示しません。

makefile

コマンド例と実行結果

 

また、makefileでのコマンドの文頭に'@'をつけるとそのコマンドの部分ではコマンドのエコーが表示を抑制できます。

makefile

コマンド例と実行結果

 

 

 

実行するコマンドを表示(dry-runモード)
(-nオプション)

-nオプションを用いるとコマンドを実行しないで、実行されるコマンドを表示できます。

makefile

コマンド例と実行結果

 

 

 

更新が必要かどうか終了ステータスに保存
(-qオプション)

-qオプションはquestionモードになり、makeでレシピの処理を行わず、出力もしません。

終了ステータスを確認することで、makeでの更新が必要であるかどうかやmakefileにエラーが存在するかを確認できます。

更新が必要ない場合は、終了ステータスが0に、
更新が必要な場合は、終了ステータスが1に、
エラーが起きた場合は、終了ステータスが2になります。

makefile

コマンド例と実行結果

 

 

 

全てのデバッグ情報を表示
(-dオプション)

-dオプションはmakeの全てのデバッグ情報を表示します。これは--debug=aと同じになります。

また、コマンド例では、デバッグ情報で表示される暗黙的なルールの情報を削除するために-Rオプションを利用しています。

makefile

コマンド例と実行結果

 

 

 

デバッグ情報を指定し表示
(--debugオプション)

--debugオプションは表示するデバッグ情報を指定して表示できます。

表示できるデバック情報の種類は以下のようになります。複数のデバッグ情報を指定する場合は、記号をカンマ区切りまたはスペース区切りで指定します。ただし、スペース区切りの場合は記号をシェルによって解釈されないように--debug='v j'のように引用符で囲む必要があります。

デバッグ情報の種類

記号 意味
a
(all)
全てのデバック情報を出力(-dオプションと同等)
b
(basic)
ターゲットの更新が必要かどうかを出力
v
(verbose)
basicに追加して更に詳しい情報を出力
i
(implicit)
ターゲットに対して暗黙的なルールの検索情報を出力
j
(jobs)
実行されるコマンドの詳細を出力
m
(makefile)
makefileについての情報を出力
n
(none)
現在有効になっているデバッグ情報をオフにする

 

また、--debugオプションを用いた例で使用するmakefileは以下のようになります。

makefile

 

 

 

--debug=b (basic)

--debug=bオプションはターゲットの更新が必要かどうかのデバッグ情報を表示します。

コマンド例と実行結果

 

 

 

--debug=v (verbose)

--debug=vオプションは--debug=bオプションの情報に加えて、さらに依存ファイルの情報についてのデバッグ情報を表示します。

コマンド例と実行結果

 

 

 

--debug=i (implicit)

--debug=iオプションは--debug=bオプションの情報に加えて、さらに暗黙的なルールの検索などのデバッグ情報を表示します。

コマンド例と実行結果

 

 

 

--debug=j (jobs)

--debug=jオプションはmakeによって実行されるコマンドのプロセス情報などのジョブ情報についてのデバッグ情報を表示します。

コマンド例と実行結果

 

 

 

--debug=m (makefile)

--debug=mオプションは--debug=bオプションの情報に加えて、さらにmakefileの読み込みなどのデバッグ情報を表示します。

コマンド例と実行結果

 

 

 

makeのトレース情報を表示
(--traceオプション)

makeでファイルを生成するときに、レシピが定義されているmakefileのファイル名や行番号、生成する場合の利用が表示されます。

また、makefile行頭での'@'や.SILENTでコマンドのエコーが非表示になっているコマンドも表示されます。

makefile

コマンド例と実行結果

 

 

 

makeのデータベースを出力
(-pオプション)

-pオプションを用いると、makefileを処理した後に環境変数やルールの定義などのmakeのデータベースを出力します。

-qオプションと組み合わせるとmakeの処理を実行させずにmakeのデータベースを確認できます。

コマンド例では、環境変数をクリアするためにenvコマンドを通し、makeコマンドを-qオプションと暗黙的なルールをクリアする-Rオプションをつけて実行し、grepコマンドでコメント行や空行を削除して出力を整形しています。

makefile

コマンド例と実行結果

 

 

 

未定義変数の参照時に警告を表示
(--warn-undefined-variablesオプション)

makeで未定義変数を参照しても、通常、警告は表示されません。

--warn-undefined-variablesオプションは、makeで未定義変数を参照したときに警告を表示します。

makefile

コマンド例と実行結果

 

 

 

指定されたファイルを変更されていると仮定
(-Wオプション)

-Wオプションでファイルを指定すると、指定されたファイルが変更されていると仮定して、makeを実行します。

makefile

コマンド例と実行結果

 

dry-runモードである-nオプションと組み合わせるとファイルを変更した場合のmakeの動作を確認できます。

 

 

 

インクルードするmakefileのディレクトリの指定
(-Iオプション)

makefileで相対パスで記述されたファイルをインクルードを行うときに、ファイル検索を行うディレクトリとして、-Iオプションでインクルードディレクトリを指定できます。

makefile

dir/make.mk

コマンド例と実行結果

 

また、-Iオプションを利用しなくてもmakefileに単純にパスを記述してもファイルをインクルードできます。

makefile

コマンド例と実行結果

 

 

 

レシピの並列実行
(-jオプション)

-jオプションで数値を指定すると、指定した数だけmakeのレシピを同時に実行できます。

makefile

コマンド例と実行結果

 

-lオプションで浮動小数点数の数値を指定すると、その数値以上のload averageの場合はレシピが実行されないようにできます。

 

 

 

並列実行時の出力メッセージをグループ化
(-Oオプション)

-jオプションでレシピを並列実行した場合、出力されるメッセージが分かりずらいものになる場合があります。

-Oオプションを用いると出力を同期して、レシピの処理の終了時などのタイミングでその出力をグループ化して表示できます。

-Oオプションでグループ化できる出力メッセージの種類には以下のようなものがあります。

グループ化の種類

記号 意味
none コマンドの出力タイミングと同時に出力される
(-jオプションのみの場合のデフォルト)
line コマンドの処理が完了した時点で出力される
target ターゲットの処理が完了した時点で出力される
(-Oオプションで何も指定しない場合のデフォルト)
recurse 再帰的なmakeの処理が完了した時点で出力される

コマンド例と実行結果

 

 

 

参考

GNU make: Options Summary