makefile demo

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)

效果

初次编译

再次编译

运行

清理

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值