####フォルダ構成
example
|-- bin
| `-- example <- (TARGET) 実行ファイル
|-- include
| `-- main.h
`-- source
|-- main.cpp
|-- makefile
`-- obj <- (OBJDIR) 中間ファイル生成先ディレクトリ
|-- main.d <- (DEPENDS) 依存関係ファイル
`-- main.o <- (OBJECTS) オブジェクトファイル
####makefile
COMPILER = g++
CFLAGS = -g -Wall -O2
LDFLAGS =
LIBS =
INCLUDE = -I../include
TARGET = ../bin/example
OBJDIR = ./obj
SOURCES = $(wildcard *.cpp)
OBJECTS = $(addprefix $(OBJDIR)/, $(SOURCES:.cpp=.o))
$(TARGET): $(OBJECTS) $(LIBS)
$(COMPILER) -o $@ $^ $(LDFLAGS)
$(OBJDIR)/%.o: %.cpp
@[ -d $(OBJDIR) ]
$(COMPILER) $(CFLAGS) $(INCLUDE) -o $@ -c $<
all: clean $(TARGET)
clean:
rm -f $(OBJECTS) $(TARGET)
####ポイント
$(OBJDIR)/%.o: %.cpp
@[ -d $(OBJDIR) ]
$(COMPILER) $(CFLAGS) $(INCLUDE) -o $@ -c $<
1行目 .cpp -> obj/.o に変換して出力するというサフィックスルール
2行目 obj/以下に出力するファイルパス(ファイル名?)を@に設定
3行目 コンパイル
コンパイル時にobj/を含んだファイル名を指定していなくてsrc以下にオブジェクトが出力されてしまって暫くはまった。。。
####参考URL
シンプルで応用の効くmakefileとその解説