概要
GNU Makeについて。
基本
Makefile
# コメント行
CC := gcc
OBJ_FILE = \
main.o
SampleProj: $(OBJ_FILE)
$(CC) -o SampleProj$(OBJ_FILE)
clean:
$(RM) *.o
$(RM) SampleProj
汎用的にしてみた(ほぼパクリ)
Makefile
TARGET = SampleProj # ターゲット名:実行形式のファイル名になります
EXTENSION = c # 拡張子
CC = gcc # コンパイラ指定
CFLAGS = -g -MMD -MP
LDFLAGS =
LIBS =
INCLUDE = -I ./include
SRC_DIR = ./src
OBJ_DIR = ./build
SOURCES = $(shell ls $(SRC_DIR)/*.$(EXTENSION))
OBJS = $(subst $(SRC_DIR),$(OBJ_DIR), $(SOURCES:.$(EXTENSION)=.o))
DEPENDS = $(OBJS:.o=.d)
all: $(TARGET)
$(TARGET): $(OBJS) $(LIBS)
$(CC) -o $@ $(OBJS) $(LDFLAGS)
$(OBJ_DIR)/%.o: $(SRC_DIR)/%.$(EXTENSION)
@if [ ! -d $(OBJ_DIR) ]; \
then echo "mkdir -p $(OBJ_DIR)"; mkdir -p $(OBJ_DIR); \
fi
$(CC) $(CFLAGS) $(INCLUDE) -o $@ -c $<
clean:
$(RM) $(OBJS) $(TARGET) $(DEPENDS)
-include $(DEPENDS)
.PHONY: all clean
注意点
以下コードのように字下げする行は「タブ」とすること。
半角スペースはダメのようです。全角スペース?もちろんダメ。
SimpleSvCl: $(OBJ_FILE)
$(CC) -o SimpleSvCl $(OBJ_FILE)
参考サイト
*C言語を使うならMakeを使おうよ
*分割コンパイルについて
*makeでコンパイルしよう
*Make と Makefile の説明
*汎用的に使えそうなMakefileを書いてみた