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

スポンサーリンク

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

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

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

 

makeコマンドのオプションについて その2もあります。

makeコマンドのオプションについて その2
makeコマンドのオプションについての続きになります。 また、makeについては以下の記事で紹介しています。

スポンサーリンク

実行するmakefileの指定
(-fオプション)

-fオプションは実行するmakefileを指定できます。デフォルトでmakeを実行する以外のファイルを指定する場合に利用できます。

file.mk

コマンド例と実行結果

 

変数$@はターゲットファイルを表すmakeの変数になります。
また、変数$<は一番初めに記述されている依存ファイルを表すmakeの変数になります。

 

 

 

タイムスタンプに関係なくレシピを実行
(-Bオプション)

makeはターゲットファイルと依存ファイルのタイムスタンプの関係で、ターゲットファイルが最新の状態の場合、そのターゲットファイルを生成するレシピを実行しません。

-Bオプションはタイムスタンプに関係なく、レシピを実行することができます。

makefile

コマンド例と実行結果

 

 

 

指定したファイルのレシピを実行しない
(-oオプション)

-oオプションは指定したファイルのタイムスタンプが依存ファイルより古い場合等でもmakeのレシピを実行しません。

makefile

コマンド例と実行結果

 

 

 

makefileを読み込む前にディレクトリを移動
(-Cオプション)

-Cオプションはmakefileを読み込む前にディレクトリを移動します。このオプションは再帰的にmakeを実行するときに便利なオプションになります。

makefile

dir/makefile

コマンド例と実行結果

 

 

 

makefileの実行前にディレクトリ情報を表示
(-wオプション)

-wオプションはmakefileの実行前や実行後にディレクトリ情報を表示します。

makefile

コマンド例と実行結果

 

また、--no-print-directoryオプションを利用するとディレクトリ情報の表示を抑制することができます。

makefile

dir/makefile

コマンド例と実行結果

 

 

 

エラーを無視
(-iオプション)

makeで実行しているコマンドでエラーが起きた場合、makeの実行が中断されます。

-iオプションを用いると、レシピ内でエラーが起きても、レシピ内のコマンドが続けて実行され続けます。

makefile

コマンド例と実行結果

 

また、makefileでコマンドの文頭に'-'をつけると、そのコマンドの部分でエラーが起きても続けて実行できます。

makefile

コマンド例と実行結果

 

 

 

エラーが起きてもできる限り実行
(-kオプション)

-kオプションは、エラーが起きてもできる限り実行処理を行います。

例えば、あるターゲットファイルに対して、複数の依存ファイルが存在する時にある依存ファイルのレシピでエラーが起きた場合、そのレシピの処理は中断されますが、別の依存ファイルの処理はそのまま行うことができます。

makefile

コマンド例と実行結果

 

また、再帰的にmakeを行う場合、-Sオプションを用いると-kオプションをキャンセルすることができます。

makefile

コマンド例と実行結果

 

コマンドの文頭に'@'をつけるとmakeでのコマンドのエコー表示を抑制することができます。

 

 

 

変数を環境変数でオーバライド
(-eオプション)

-eオプションを利用するとmakeの変数より環境変数を優先しオーバライドします。

makefile

コマンド例と実行結果

 

 

 

文字列をmakefileの構文として実行
(--evalオプション)

--evalオプションを用いるとmakefileを読み込む前に文字列をmakefileの構文として読み込むことができます。また、--evalオプションはmakeでのeval関数のコマンドライン版になります。

makefile

コマンド例と実行結果

 

--evalオプションはmakefileを読み込む前に文字列を読み込むため、文字列によってはmakeのデフォルトゴールが変更されます。

 

 

 

シンボリックリンクファイルのタイムスタンプも参照
(-Lオプション)

通常、シンボリックリンクファイルを参照している場合、リンク先のタイムスタンプが参照されます。

-Lオプションを用いると、シンボリックリンクファイルのタイムスタンプも参照され、両方のファイルのタイムスタンプから新しい方のタイムスタンプをファイルのタイムスタンプとして扱います。

makefile

コマンド例と実行結果

 

 

 

デフォルトの暗黙的なルールをクリア
(-rオプション)

-rオプションはサフィックスルールのような暗黙的なルールの定義をクリアします。

デフォルトでどのようなサフィックスルールが存在するかはmakefileが存在しない状態で、makeのデータベースを確認する-pオプションが利用できます。

以下のコマンドは、envコマンドを用いて環境変数を取り除き、grepコマンドでコメント行と空行を取り除いてmakeのデータベースを確認します。

コマンド例

実行結果例 ▼表示

 

 

 

デフォルトの暗黙的なルールとその変数をクリア
(-Rオプション)

-Rオプションはデフォルトの暗黙的なルールの変数をクリアします。このオプションは-rオプションも自動的にオンになるため、結果として、デフォルトの暗黙的なルールとその変数をクリアすることになります。

コマンド例

実行結果例 ▼表示

 

 

 

ファイルに対して touchのみを実行
(-tオプション)

-tオプションを用いるとレシピを実行する代わりにtouchコマンドを実行します。このオプションを用いるとレシピを実行しないでmakeで生成するファイルのタイムスタンプを変更できます。

makefile

コマンド例と実行結果