首先给出makefile.in文件(后缀in表示include),使用它就像我们引用头文件一样,在我们的makefile中include,就可很轻松的编译我们的代码了
CC=$(CXX)
ifndef BIN
BIN=$(notdir $(shell pwd ))
endif
TARGET=$(TARGET_DIR)/$(BIN)
CXXFLAGS+=-Wall
CPPFLAGS+=$(INC) $(LIB)
ifdef DEBUG
OBJ_DIR=.debug
CXXFLAGS+= -g
else
OBJ_DIR=.release
endif
OBJS=$(SRC:%.cpp=$(OBJ_DIR)/%.o)
#This one is complicated, but they have same result
#OBJS=$(patsubst %.cpp, $(OBJ_DIR)/%.o, $(SRC))
all : $(TARGET)
$(TARGET) : $(OBJS)
@echo -----------Making $(TARGET) $(OBJS)
@$(CC) $(CXXFLAGS) $(LIB_DIR) $(OBJS) $(CPPFLAGS) -o $@
$(OBJ_DIR)/%.o : %.cpp
@echo -----------Compiling $<
@[ -d $(@D) ] || mkdir -p $(@D)
@$(CC) $(CPPFLAGS) $(CXXFLAGS) -c $< -o $@
.PHONY: clean
clean:
rm -rf $(OBJ_DIR) $(TARGET)
我们的makefile文件
DEBUG=1
BIN=myapp
TARGET_DIR=.
SRC=$(shell find ./ -name "*.cpp")
include ./makefile.in