4
3

More than 5 years have passed since last update.

Make:Makefileの書き方 (1)

Last updated at Posted at 2016-07-14

概要

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を書いてみた

4
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
3