3.3. Makefile の使用

複数のソースファイルで構成される複雑なプログラムを構築するには、makeMakefile と呼ばれる設定ファイルを使用して、プログラムのコンポーネントをコンパイルし、最終的な実行可能ファイルを構築する方法を制御します。Makefile には、作業ディレクトリーのクリーニング、プログラムファイルのインストールおよびアンインストール、およびその他の操作の指示を含めることもできます。

make は、現在のディレクトリーの GNUmakefilemakefile、または Makefile というファイルを自動的に使用します。別のファイル名を指定するには、-f オプションを使用します。

$ make -f make_file

Makefile 構文の詳細の説明は、本ガイドの対象外です。GNU make、アップストリームの GNU make マニュアルを参照してください。これは、GNU make ユーティリティー、Makefile 構文、その使用方法を詳細に説明しています。

完全な make マニュアルは、インストールの一部として Texinfo 形式でも利用できます。このマニュアルを表示するには、次のコマンドを実行します。

$ scl enable devtoolset-10 'info make'

例3.2 例: Makefile を使用した C プログラムの構築

例3.1「make を使用した C プログラムの構築」 で紹介されている簡単な C プログラムを構築するために Makefile という名前が付けられた以下の汎用 Makefile について考えてみましょう。Makefile は変数を定義し、ターゲットレシピで構成される 4 つの ルール を指定します。レシピの行は、TAB 文字で開始する必要があることに注意してください。

CC=gcc
CFLAGS=-c -Wall
SOURCE=hello.c
OBJ=$(SOURCE:.c=.o)
EXE=hello

all: $(SOURCE) $(EXE)

$(EXE): $(OBJ)
        $(CC) $(OBJ) -o $@

.o: .c
        $(CC) $(CFLAGS) $< -o $@

clean:
        rm -rf $(OBJ) $(EXE)

この Makefile を使用して hello.c プログラムを構築するには、make ユーティリティーを実行します。

$ scl enable devtoolset-10 'make'
gcc -c -Wall hello.c -o hello.o
gcc hello.o -o hello

これにより、現在の作業ディレクトリーに、新しいオブジェクトファイル hello.c と新しいバイナリーファイル hello が作成されます。

作業ディレクトリーを消去するには、以下のコマンドを実行します。

$ scl enable devtoolset-10 'make clean'
rm -rf hello.o hello

これにより、作業ディレクトリーからオブジェクトおよびバイナリーファイルが削除されます。