2.4. Make でのさらなるコードの管理
GNU make ユーティリティー (略称 make) は、ソースファイルからの実行可能ファイルの生成を管理するツールです。make は自動的に、複雑なプログラムのどの部分が変更されたかを判断し、再コンパイルする必要があります。make は、Makefiles と呼ばれる絵設定ファイルを使用して、プログラムを構築する方法を管理します。
2.4.1. GNU make および Makefile の概要 リンクのコピーリンクがクリップボードにコピーされました!
特定のプロジェクトのソースファイルから使用可能な形式 (通常は実行ファイル) を作成するには、必要な手順を完了します。後で繰り返し実行できるように、アクションとそのシーケンスを記録します。
Red Hat Enterprise Linux には、この目的に合わせて設計されたビルドシステムである、GNU make が含まれています。
前提条件
- コンパイルとリンクの概念を理解している。
GNU make
GNU make はビルドプロセスの命令が含まれる Makefile を読み込みます。Makefile には、特定のアクション (レシピ) で特定の条件 (ターゲット) を満たす方法を記述する複数の ルール が含まれています。ルールは、別のルールに階層的に依存できます。
オプションを指定せずに make を実行すると、現在のディレクトリーで Makefile を検索し、デフォルトのターゲットに到達しようと試みます。実際の Makefile ファイル名は Makefile、makefile、および GNUmakefile です。デフォルトのターゲットは、Makefile の内容で決まります。
Makefile の詳細
Makefile は比較的単純な構文を使用して 変数 と ルール を定義します。Makefile は ターゲット と レシピ で構成されます。ターゲットでは、ルールが実行された場合にどのような出力が表示されるのかを指定します。レシピの行は、TAB 文字で開始する必要があります。
通常、Makefile は、ソースファイルをコンパイルするルール、作成されるオブジェクトファイルをリンクするルール、および階層上部のエントリーポイントとしてのロールを果たすターゲットで設定されます。
1 つのファイル (hello.c) で設定される C プログラムを構築する場合は、以下の Makefile を参照してください。
all: hello
hello: hello.o
gcc hello.o -o hello
hello.o: hello.c
gcc -c hello.c -o hello.o
この例では、ターゲット all に到達するには、ファイル hello が必要です。hello を取得するには、hello.o (gcc でリンク) が必要で、hello.c (gcc でコンパイル) を基に作成します。
ターゲットの all は、ピリオド (.) で開始されない最初のターゲットであるため、デフォルトのターゲットとなっています。この Makefile が現在のディレクトリーに含まれている場合に、引数なしで make を実行するのは、make all を実行するのと同じです。
一般的な Makefile
より一般的な Makefile は、この手順を正規化する変数を使用し、ターゲット "clean" を追加して、ソースファイル以外をすべて削除します。
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 にソースファイルを追加する場合は、SOURCE 変数が定義されている行に追加します。
2.4.2. 例: Makefile を使用した C プログラムの構築 リンクのコピーリンクがクリップボードにコピーされました!
この例の手順に従い、Makefile を使用して C のサンプルプログラムを構築します。
手順
hellomakeディレクトリーを作成します:$ mkdir hellomakehellomakeディレクトリーに移動します。$ cd hellomake以下の内容で
hello.cファイルを作成します。#include <stdio.h> int main(int argc, char *argv[]) { printf("Hello, World!\n"); return 0; }以下の内容で
Makefileファイルを作成します。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 レシピの行は、Tab 文字で開始する必要があります。上記のテキストをドキュメントからコピーする際に、カットアンドペーストのプロセスでは、タブではなくスペースが貼り付けられる場合があります。この場合は、手動で修正してください。
makeを実行します。$ make$ gcc -c -Wall hello.c -o hello.o $ gcc hello.o -o helloこのコマンドで、実行可能ファイル
helloが作成されます。この実行可能ファイル
helloを実行します。$ ./helloHello, World!Makefile のターゲット
cleanを実行して、作成されたファイルを削除します。$ make clean# rm -rf hello.o hello
2.4.3. make のドキュメント リンクのコピーリンクがクリップボードにコピーされました!
make の詳細は、以下に記載のドキュメントを参照してください。
インストールされているドキュメント
manツールおよびinfoツールで、お使いのシステムにインストールされている man ページと情報ページを表示します。make の man ページを表示します:
$ man makeメーカー情報ページを表示:
$ info make
オンラインドキュメント
- Free Software Foundation 提供の GNU Make Manual