LoginSignup
17
25

More than 5 years have passed since last update.

C++ Makefile 別ディレクトリにオブジェクト出力

Posted at

フォルダ構成

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とその解説

17
25
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
17
25