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

2024-04-02

GNU Make の -C dir オプション

使用例

以下の例では、-C オプションを使用して、subdir ディレクトリにある Makefile を実行します。

make -C subdir

このコマンドは、現在のディレクトリではなく、subdir ディレクトリに移動し、そのディレクトリにある Makefile を実行します。

複数ディレクトリの指定

-C オプションを複数回使用することで、複数のディレクトリを指定することができます。

make -C dir1 -C dir2

このコマンドは、まず dir1 ディレクトリに移動し、そのディレクトリにある Makefile を実行します。その後、dir2 ディレクトリに移動し、そのディレクトリにある Makefile を実行します。

オプションの組み合わせ

-C オプションは、他の make オプションと組み合わせて使用することができます。

make -C subdir -f Makefile.other

このコマンドは、subdir ディレクトリに移動し、Makefile.other という名前の Makefile を実行します。

注意事項

-C オプションを使用する場合は、指定されたディレクトリに Makefile が存在することを確認する必要があります。

また、-C オプションを使用して別のディレクトリに移動すると、現在のディレクトリは変更されます。元のディレクトリに戻するには、cd コマンドを使用する必要があります。

-C オプションは、make コマンドに作業ディレクトリを指定するために使用されます。これは、現在のディレクトリではなく、指定されたディレクトリで Makefile を検索し、実行することを意味します。

-C オプションは、複数のディレクトリを指定したり、他の make オプションと組み合わせて使用することができます。



GNU Make の -C dir オプションのサンプルコード

サブディレクトリにある Makefile を実行する

# 上位ディレクトリの Makefile

all:
	@echo "上位ディレクトリ"
	make -C subdir

subdir:
	@echo "サブディレクトリ"

複数のディレクトリにある Makefile を実行する

# Makefile

all:
	@echo "ディレクトリ1"
	make -C dir1

	@echo "ディレクトリ2"
	make -C dir2

この Makefile は、dir1dir2 というディレクトリにある Makefile を実行します。

オプションを指定して Makefile を実行する

# Makefile

all:
	@echo "ディレクトリ"
	make -C subdir -f Makefile.other

この Makefile は、subdir ディレクトリにある Makefile.other という名前の Makefile を実行します。

環境変数を設定して Makefile を実行する

# Makefile

all:
	@echo "環境変数 FOO は $FOO"
	make -C subdir FOO=bar

この Makefile は、subdir ディレクトリで FOO 環境変数を bar に設定して Makefile を実行します。

シンボリックリンクを使用して Makefile を実行する

# 上位ディレクトリの Makefile

all:
	@echo "上位ディレクトリ"
	make -C subdir

subdir:
	@echo "サブディレクトリ"

# サブディレクトリの Makefile

all:
	@echo "サブディレクトリ"

subdir ディレクトリは、上位ディレクトリのシンボリックリンクであるとします。

この場合、make コマンドは、subdir ディレクトリに移動せずに、シンボリックリンクを通して上位ディレクトリの Makefile を実行します。

-C オプションは、さまざまな状況で使用することができます。これらのサンプルコードを参考に、-C オプションを有効活用してください。



GNU Make で作業ディレクトリを指定する他の方法

VPATH 変数は、make コマンドに検索パスを指定するために使用されます。VPATH 変数に指定されたディレクトリは、make コマンドが Makefile を検索する際に優先的に検索されます。

# Makefile

VPATH = subdir

all:
	@echo "サブディレクトリの Makefile を実行"
	make -f Makefile

この Makefile は、subdir ディレクトリにある Makefile を優先的に検索します。

include ディレクティブは、Makefile に別の Makefile をインクルードするために使用されます。include ディレクティブで指定された Makefile は、現在のディレクトリではなく、指定されたディレクトリから読み込まれます。

# Makefile

include subdir/Makefile

all:
	@echo "サブディレクトリの Makefile をインクルード"

この Makefile は、subdir ディレクトリにある Makefile をインクルードします。

cd コマンドは、シェルで作業ディレクトリを変更するために使用されます。make コマンド内で cd コマンドを使用することで、作業ディレクトリを一時的に変更することができます。

# Makefile

all:
	@echo "現在のディレクトリ: $(PWD)"
	cd subdir
	@echo "サブディレクトリ: $(PWD)"
	make
	cd ..
	@echo "現在のディレクトリ: $(PWD)"

この Makefile は、subdir ディレクトリに一時的に移動し、そのディレクトリにある Makefile を実行します。

-C dir オプション以外にも、VPATH 変数、include ディレクティブ、cd コマンドを使用して GNU Make で作業ディレクトリを指定することができます。

これらの方法をそれぞれの特徴を理解して、状況に応じて使い分けてください。




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

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



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

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



GNU Make の --jobs オプションを使った実際のプロジェクトの例

--jobs[=jobs] オプションは、GNU Make で同時に実行されるジョブ(コマンド)の数を指定します。これは、複数のターゲットを並行してビルドしたり、依存関係のないレシピを同時に実行したりする場合に便利です。構文オプションjobs: ジョブ数の指定。省略すると、デフォルトのジョブ数が使用されます。


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

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


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

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


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

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


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

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