GNU Make の "--dry-run" オプション:ビルド前にコマンドを確認する方法

2024-04-02

GNU Make のドライランオプション "--dry-run"

--dry-run オプションは、GNU Make に実際の処理を実行せずに、ターゲットのビルドに必要なコマンドを表示させるためのオプションです。ビルド前にコマンドを確認したい場合や、トラブルシューティングに役立ちます。

使用方法

--dry-run オプションは、make コマンドラインで以下のいずれかの方法で指定できます。

  • 単独で指定する
make --dry-run
  • ターゲットと一緒に指定する
make clean --dry-run

動作

--dry-run オプションが指定されると、GNU Make は以下の処理を行います。

  1. Makefile を読み込み、依存関係を解析します。
  2. ターゲットのビルドに必要なコマンドを生成します。
  3. 生成されたコマンドを 実行せずに 画面に表示します。

出力例

# ターゲット: clean

rm -f *.o
rm -f *.exe

詳細

  • --dry-run オプションは、-n オプションと短縮形で同じ意味です。
  • --dry-run オプションは、以下のオプションと組み合わせて使用できます。
    • -v オプション: 生成されたコマンドの詳細を表示します。
    • -d オプション: デバッグ情報を表示します。
  • --dry-run オプションは、以下の条件では動作しません。
    • レシピの先頭が + 文字で始まる場合
    • レシピ内に $(MAKE) または ${MAKE} 文字列が含まれる場合

--dry-run オプションは、ビルド前にコマンドを確認したい場合や、トラブルシューティングに役立ちます。特に、複雑な Makefile を使用している場合や、ビルドに時間がかかる場合に有効です。

補足

  • 日本語の資料では、--dry-run オプションを 「ドライラン」 または 「空実行」 と呼ぶこともあります。
  • --dry-run オプションは、GNU Make だけでなく、他の Make ツールでも使用できる場合があります。

--dry-run オプションについて不明な点があれば、お気軽にご質問ください。



GNU Make の "--dry-run" オプションを使ったサンプルコード

単純な Makefile

# ターゲット: hello

echo "Hello, world!"

# ターゲット: clean

rm -f hello
make --dry-run

出力例

# ターゲット: hello

echo "Hello, world!"

# ターゲット: clean

rm -f hello

依存関係を持つ Makefile

# ターゲット: main

main.o: main.c
	gcc -c main.c -o main.o

main: main.o
	gcc main.o -o main

# ターゲット: clean

rm -f main.o main

この Makefile を以下のように実行すると、ターゲット main のビルドに必要なコマンドのみが表示されます。

make main --dry-run

出力例

# ターゲット: main

gcc -c main.c -o main.o

gcc main.o -o main

条件分岐を含む Makefile

# ターゲット: hello

ifeq ($(OS), Linux)
	echo "Hello, Linux!"
else
	echo "Hello, world!"
endif

# ターゲット: clean

rm -f hello

この Makefile を以下のように実行すると、現在のオペレーティングシステムに応じたメッセージが表示されます。

make --dry-run

出力例

# ターゲット: hello

echo "Hello, Linux!"

# ターゲット: clean

rm -f hello

これらのサンプルコードは、--dry-run オプションの基本的な使い方を示しています。--dry-run オプションは、様々な状況で役立ちますので、ぜひ活用してみてください。

--dry-run オプションを使ったサンプルコードについて不明な点があれば、お気軽にご質問ください。



GNU Make の "--dry-run" オプションの代替方法

コマンドをコメントアウトする

# ターゲット: hello

# echo "Hello, world!"

# ターゲット: clean

rm -f hello

この Makefile を実行すると、コメントアウトされたコマンドは実行されません。

"echo" コマンドを使う

# ターゲット: hello

echo "** 実行するコマンド: ** echo \"Hello, world!\""

# ターゲット: clean

rm -f hello

この Makefile を実行すると、実際の処理ではなく、実行するコマンドが "echo" コマンドによって表示されます。

"make -p" オプションを使う

make -p

このコマンドを実行すると、Makefile 内の変数とマクロの値が表示されます。

デバッガーを使う

GNU Make には、-d オプションを使ってデバッガーを起動することができます。デバッガーを使うと、Makefile の実行をステップ実行したり、変数の値を確認したりすることができます。

シミュレーションツールを使う

"make-sim" などのシミュレーションツールを使うと、Makefile の実行をシミュレーションすることができます。シミュレーションツールを使うと、実際の処理を実行せずに、依存関係やコマンドの出力結果を確認することができます。

  • 簡単な確認であれば、コメントアウトしたり "echo" コマンドを使うのが簡単です。
  • 複雑な Makefile の場合は、デバッガーやシミュレーションツールを使うのが有効です。

--dry-run オプション以外にも、GNU Make の動作を確認する方法はいくつかあります。これらの方法を使いこなすことで、Makefile の開発効率を上げることができます。




"-w" オプションと Makefile の .SILENT ディレクティブ:徹底比較

-w オプションは、GNU Make における重要なコマンドラインオプションの一つです。このオプションは、警告メッセージの表示を制御するために使用されます。機能-w オプションには、以下の 3 つの機能があります。警告メッセージの抑制特定の警告メッセージの抑制



あなたは使いこなせる?GNU Make の "-k" オプションとその他方法

上記のコマンドは、Makefile に記述されたすべてのターゲットを、エラーが発生しても すべて実行しようとします。-k オプションには、以下の 2 つの動作モードがあります。エラーがあっても処理を継続する エラーが発生しても、Make は処理を継続し、残りのターゲットを実行しようとします。 エラーが発生したターゲットは、$? 変数に格納されます。 詳細なエラー情報は、make -r コマンドで確認できます。


GNU Make の --version オプションの詳細解説

コマンドラインから --version オプションを実行すると、次の情報が表示されます。Make ユーティリティのバージョン番号メジャーバージョン番号マイナーバージョン番号パッチレベルリリース候補番号 (存在する場合)ビルドホストビルド日時


include ディレクティブを使用して作業ディレクトリを指定する

以下の例では、-C オプションを使用して、subdir ディレクトリにある Makefile を実行します。このコマンドは、現在のディレクトリではなく、subdir ディレクトリに移動し、そのディレクトリにある Makefile を実行します。


GNU Make で特定の Makefile の一部のみを処理する

"-b" オプションは、コマンドラインで make コマンドを実行する際に指定します。オプションの後に、読み込むファイルの名前を指定します。例:このコマンドは、"Makefile. debug" というファイルを読み込み、その内容を Makefile として処理します。



GNU Make の --no-print-directory オプション: ディレクトリ名の出力を抑制する

--no-print-directory オプションは、make が処理する各ディレクトリの名前を出力することを抑制します。これは、大量のディレクトリを処理する場合、出力を簡潔にするために役立ちます。オプションの詳細デフォルトの動作: make は、処理する各ディレクトリの名前を出力します。


あなたは使いこなせる?GNU Make の "-k" オプションとその他方法

上記のコマンドは、Makefile に記述されたすべてのターゲットを、エラーが発生しても すべて実行しようとします。-k オプションには、以下の 2 つの動作モードがあります。エラーがあっても処理を継続する エラーが発生しても、Make は処理を継続し、残りのターゲットを実行しようとします。 エラーが発生したターゲットは、$? 変数に格納されます。 詳細なエラー情報は、make -r コマンドで確認できます。


include ディレクティブを使用して作業ディレクトリを指定する

以下の例では、-C オプションを使用して、subdir ディレクトリにある Makefile を実行します。このコマンドは、現在のディレクトリではなく、subdir ディレクトリに移動し、そのディレクトリにある Makefile を実行します。


"-w" オプションと Makefile の .SILENT ディレクティブ:徹底比較

-w オプションは、GNU Make における重要なコマンドラインオプションの一つです。このオプションは、警告メッセージの表示を制御するために使用されます。機能-w オプションには、以下の 3 つの機能があります。警告メッセージの抑制特定の警告メッセージの抑制


GNU Make の --quiet オプションでメッセージ出力を抑制

--quiet オプションは、以下の動作を引き起こします。ヘッダーとフッターメッセージの抑制ターゲットの更新に関する情報の抑制レシピの実行に関する情報の抑制エラーメッセージの表示--quiet オプションは、単独で使用したり、他のオプションと組み合わせて使用したりできます。たとえば、-v オプションと組み合わせて使用すると、レシピの実行に関する詳細情報のみを表示できます。