【Makefile】依存関係を自動生成する試み2014
かつて書いたMakefile、改めて見なおしてみるとどうにも醜い。
10分ほど試行錯誤したら、汚いハックをあっさり取り除けたので訂正して公開。
2年前の自分は何考えてたんだ……。
以下、パブリックドメインとするので、煮るなり焼くなり好きにしてください。
PROGRAM_NAME := $(shell basename `pwd`) # compiler CXX := clang++ CXXFLAGS := -O2 -Wextra LIBS := # out OUT_DIR := out # program PROGRAM_DIR := $(OUT_DIR)/bin PROGRAM := $(PROGRAM_DIR)/$(PROGRAM_NAME) # sources SOURCE_DIR := src SOURCES := $(wildcard $(SOURCE_DIR)/*.cpp) SOURCE_NAMES = $(notdir $(SOURCES)) # headers HEADER_DIR := include HEADERS := $(wildcard $(HEADER_DIR)/*.hpp) # objs OBJ_DIR := $(OUT_DIR)/obj OBJS := $(addprefix $(OBJ_DIR)/,$(SOURCE_NAMES:.cpp=.o)) # dependencies DEPEND_DIR := $(OUT_DIR)/depend DEPENDS := $(addprefix $(DEPEND_DIR)/,$(SOURCE_NAMES:.cpp=.depend)) .PHONY: all all: $(DEPENDS) $(PROGRAM) $(PROGRAM): $(OBJS) @mkdir -p $(PROGRAM_DIR) $(CXX) $(CXXFLAGS) $(LIBS) $^ -o $(PROGRAM) $(DEPEND_DIR)/%.depend: $(SOURCE_DIR)/%.cpp $(HEADERS) @echo "generating $@" @mkdir -p $(DEPEND_DIR) @$(CXX) $(CXXFLAGS) $(LIBS) -I$(HEADER_DIR) -MM $< > $@ $(OBJ_DIR)/%.o: $(SOURCE_DIR)/%.cpp @mkdir -p $(OBJ_DIR) $(CXX) $(CXXFLAGS) $(LIBS) -I$(HEADER_DIR) -c $^ -o $@ ifneq "$(MAKECMDGOALS)" "clean" -include $(DEPENDS) endif .PHONY : clean clean: $(RM) -r $(OUT_DIR)
makedepend? なにそれおいしいの?