toge's diary

コンピュータ関連の趣味をつらつらと。

Makefileの限界はこんなところではない

static ruleというのを使えばいいらしい。

OBJ = hoge/main/Rival.o \
      hoge/main/Player.o \
      hoge/main/Model.o \
      hoge/main/StageView.o \
      hoge/main/SubStageView.o \
      hoge/main/InitialView.o \
      hoge/main/TextView.o \
      hoge/main/PlayerInfoView.o 

$(OBJ) : %.o : %.cpp
	$(CXX) $(CFLAG) -Ihoge -Ihoge/main -c -o $@ $< 

ほええ、とっても簡単に、やりたいことが出来てしまいました。すっきり。
随分使い込んでいるつもりだったけれど、私のMakefileの知識なんてあさはなもんだなぁ。

これじゃいまいちメリットが分かりませんね。
こんなんでどうでしょ?

HOGE_SRC       = $(wildcard hoge/*.cpp)
HOGE_MAIN_SRC  = $(wildcard hoge/main/*.cpp)
HOGE_TITLE_SRC = $(wildcard hoge/title/*.cpp)

HOGE_OBJ = \
	$(HOGE_SRC:.cpp=.o) \
	$(HOGE_MAIN_SRC:.cpp=.o) \
	$(HOGE_TITLE_SRC:.cpp=.o) 

$(HOGE_MAIN_SRC:.cpp=.o) : %.o : %.cpp
	$(CXX) $(CFLAG) -Ihoge -Ihoge/main -c -o $@ $<

$(HOGE_TITLE_SRC:.cpp=.o) : %.o : %.cpp
	$(CXX) $(CFLAG) -Ihoge -Ihoge/title -c -o $@ $<

Hoge : $(HOGE_OBJ) $(FW_OBJ) $(SDL_GL2D_OBJ) $(UGLY_FONT_OBJ) $(TINYXPATH_OBJ)
	$(CXX) $(CFLAG) -o $@ $^ $(LDFLAG)