【初心者向け】Make の `-b` オプションを使いこなそう! ターゲット強制ビルド、依存関係更新、再帰実行をマスター
対象ターゲットの強制ビルド
-b
オプションは、指定したターゲットのビルドを強制的に実行するために使用されます。通常、Make は依存関係が変更された場合のみ、ターゲットを再ビルドします。しかし、-b
オプションを使用すると、たとえ依存関係が変更されていなくても、Make は指定したターゲットを強制的に再ビルドします。
make -b mytarget
この例では、mytarget
ターゲットが強制的に再ビルドされます。
必要な依存関係のみの更新
-b
オプションは、必要な依存関係のみを更新するために使用できます。通常、Make はすべての依存関係を再ビルドしますが、-b
オプションを使用すると、Make は変更された依存関係のみを再ビルドし、変更されていない依存関係はスキップします。
make -b mytarget -n
この例では、mytarget
ターゲットに必要な依存関係のみが再ビルドされます。-n
オプションは、実際に実行せずに、Make が何をすべきかをシミュレートします。
サブディレクトリへの再帰実行
-b
オプションは、サブディレクトリに再帰的に実行するために使用できます。このオプションを使用すると、Make は現在のディレクトリだけでなく、サブディレクトリにあるすべての Makefile も処理します。
make -b mytarget -R
この例では、mytarget
ターゲットと、現在のディレクトリとサブディレクトリにあるすべての Makefile が処理されます。-R
オプションは、再帰実行を有効にします。
-b
オプションは、上記以外にもさまざまな用途で使用できます。
- 特定のディレクトリで実行する
- 特定の変数の値を設定する
- 特定のルールの実行を強制する
詳細については、GNU Make のマニュアルを参照してください。
-b
オプションは、GNU Make の強力なツールであり、ビルドプロセスを制御するためにさまざまな方法で使用できます。このオプションを使用することで、開発者はビルドプロセスをより効率的にし、時間を節約することができます。
-d
: デバッグ情報を表示する-v
: 詳細な出力を表示する-j
: 並行ジョブ数を指定する
例 1: 特定のターゲットを強制的にビルド
#Makefile
all: program1 program2
program1: program1.c
gcc -o program1 program1.c
program2: program2.c
gcc -o program2 program2.c
この Makefile で、make
と実行すると、program1
と program2
の両方がビルドされます。しかし、make -b program2
と実行すると、program2
のみ強制的にビルドされます。
例 2: 必要な依存関係のみを更新
#Makefile
all: program1 program2
program1: program1.c
gcc -o program1 program1.c
program2: program2.c program1
gcc -o program2 program2.c
この Makefile で、make
と実行すると、program1
と program2
の両方がビルドされます。しかし、program1.c
を変更して make -b program2 -n
と実行すると、program2
の再ビルドが必要であることが示され、実際に program2
は再ビルドされません。
例 3: サブディレクトリに再帰的に実行
#Makefile
all: subdir/program
subdir/program: subdir/program.c
gcc -o subdir/program subdir/program.c
この Makefile で、make
と実行すると、subdir/program
がビルドされます。しかし、make -b subdir/program -R
と実行すると、subdir/program
と subdir
ディレクトリにあるすべての Makefile が処理されます。
依存関係を明示的に指定
-b
オプションの代わりに、依存関係を明示的に指定することで、ターゲットを強制的にビルドすることができます。
#Makefile
all: program1 program2
program1: program1.c
gcc -o program1 program1.c
program2: program2.c program1
gcc -o program2 program2.c
この例では、program2
を強制的にビルドするには、make program2 program1
と実行します。このコマンドは、program2
の依存関係である program1
と program2.c
を明示的に指定します。
make touch を使用する
make touch
コマンドを使用して、必要な依存関係のみを更新することができます。このコマンドは、指定したファイルのタイムスタンプを更新し、Make にそのファイルが変更されたと認識させます。
make touch program1.c
この例では、program1.c
が変更されたと Make に認識させ、program1
ターゲットが再ビルドされます。
サブディレクトリを個別にビルド
-b
オプションの代わりに、サブディレクトリを個別にビルドすることで、再帰的に実行することができます。
cd subdir
make
cd ..
この例では、subdir
ディレクトリに移動して make
コマンドを実行し、その後親ディレクトリに戻ります。これにより、subdir
ディレクトリと subdir
内のすべての Makefile が処理されます。
-b
オプションは便利なツールですが、状況によっては代替方法の方が適切な場合があります。上記で説明した代替方法は、-b
オプションと同じ結果を達成するために使用できます。
-d
: デバッグ情報を表示する-v
: 詳細な出力を表示する-j
: 並行ジョブ数を指定する