Makefileは、コンパイル、依存関係の管理、インストールなどのルールを記述しておくためのファイルであり、makeコマンドが読み込んで処理を行う。
Makefileには、ファイルの生成手順やプログラムを構成している同士の関係を記述する。
Makefileの書き方
Makefileの例
CC = gcc
CFLAGS = -Wall
LDFLAGS = -lwiringPi
TARGET = my_program
SRCS = $(wildcard *.c)
OBJS = $(SRCS:.c=.o)
all: $(TARGET)
$(TARGET): $(OBJS)
$(CC) $(CFLAGS) -o $@ $^ $(LDFLAGS)
%.o: %.c
$(CC) $(CFLAGS) -c $< -o $@
clean:
rm -f $(OBJS) $(TARGET)
文法の説明
Makefileでは、以下のような特別な変数を使用することができる。
- CC: Cコンパイラのパスを指定する変数
- CFLAGS: コンパイルオプションを指定する変数
- LDFLAGS: リンクオプションを指定する変数
- TARGET:Makefile内で定義される変数。Makefileがビルドするターゲットの名前を示す。通常、Makefileは複数のターゲットを定義することができ、各ターゲットは独自のルールと依存関係を持ちます。TARGET は、Makefile内で定義されるターゲット名を表すために使用される変数です。
- LIBS: リンクするライブラリを指定する変数
- $@: ターゲット名を表す特別な変数
- $<: 依存関係の中で最初のファイル名を表す特別な変数
- $^: 依存関係に含まれるすべてのファイル名を表す特別な変数
- SUBDIRS:Makefileでサブディレクトリを指定するための変数。この変数に指定されたサブディレクトリに対して、Makefileが再帰的に実行する。
SUBDIRS = subdir1 subdir2 subdir3
- .PHONY: Makefileで実行するタスクを定義するための特別な目印。.PHONYで定義されたターゲットは、必ず実行されるようになります。たとえば、次のように書くことで、Makefile内で clean というターゲットを定義しています。
.PHONY: clean
clean:
rm -f *.o myprogram
このようにすることで、make cleanと実行すると、常に"rm -f *.o myprogram"が実行される。.PHONYは、実ファイル名と同じ名前を持つターゲットについて、その名前のファイルがすでに存在している場合、そのファイルをターゲットとして実行しないようにするために使用されます。
Regenerate response