Makefile
# compile
COMPILER = g++
COMPILE_STD_OPTIONS = -std=c++11
COMPILE_WARN_OPTIONS = -Wall
COMPILE_DEBUG_OPTIONS = -g
# marrco
MARRCOS =
# directory
SRC_DIR = src
INCLUD_DIR = include
STATIC_LIB_DIR = lib
OUTPUT_DIR = output
SHARED_LIB_DIR = lib
# file
SRC_FILES = $(wildcard $(SRC_DIR)/*.cpp)
# SRC_OBJ_FILES = $(patsubst %.cpp, %.o, $(SRC_FILES))
SRC_OBJ_FILES = $(SRC_FILES:.cpp=.o)
OBJ_FILES = $(subst $(SRC_DIR)/, , $(SRC_OBJ_FILES))
OBJ_OUTPUT_FILES = $(addprefix $(OUTPUT_DIR)/, $(OBJ_FILES))
# static library
STATIC_LIBS = pthread sqlite3
# shared libraty
SHARED_LIBS =
# compile options
MARRCO_OPTIONS = $(addprefix -D, $(MARRCOS))
INCLUDE_DIR_OPTIONS = $(addprefix -I, $(INCLUD_DIR))
COMPILE_OPTIONS = $(COMPILE_STD_OPTIONS) $(COMPILE_WARN_OPTIONS) $(COMPILE_DEBUG_OPTIONS) $(MARRCO_OPTIONS) $(INCLUDE_DIR_OPTIONS)
# link options
STATIC_LIB_DIR_OPTIOS = $(addprefix -L, $(STATIC_LIB_DIR))
STATIC_LIBS_OPTIONS = $(addprefix -l, $(STATIC_LIBS))
SHARED_LIBS_OPTIONS = $(addprefix -l, $(SHARED_LIBS))
LINK_OPTIONS = $(STATIC_LIBS_OPTIONS) $(STATIC_LIB_DIR_OPTIOS) $(SHARED_LIBS_OPTIONS)
TARGET = main.exe
# specify targets
.PHONY:mkdir run clean
# test:
# @echo "SRC_FILES:$(SRC_FILES)"
# @echo "SRC_OBJ_FILES:$(SRC_OBJ_FILES)"
# @echo "OBJ_FILES:$(OBJ_FILES)"
# @echo "OBJ_OUTPUT_FILES:$(OBJ_OUTPUT_FILES)"
# @echo $(SRC_FILES:.cpp=.o)
# default target
default:mkdir $(TARGET)
$(TARGET):$(OBJ_OUTPUT_FILES)
@echo "link"
$(COMPILER) $(OBJ_OUTPUT_FILES) -o $(OUTPUT_DIR)/$(TARGET) $(LINK_OPTIONS)
# $(OBJ_OUTPUT_FILES):$(OUTPUT_DIR)/%.o:$(SRC_DIR)/%.cpp
$(OUTPUT_DIR)/%.o:$(SRC_DIR)/%.cpp
@echo "compile $@"
$(COMPILER) $(COMPILE_OPTIONS) -c $< -o $@
mkdir:
@echo "mkdir"
ifneq ($(OUTPUT_DIR), $(wildcard $(OUTPUT_DIR)))
@mkdir $(OUTPUT_DIR)
endif
run:
$(OUTPUT_DIR)/$(TARGET)
clean:
rm -rf $(OUTPUT_DIR)
效果
初次编译
再次编译
运行
清理