用make实现的小型c/c++可复用编译器
程序员文章站
2022-05-13 15:09:27
...
目录结构
源码实现
.PHONY : all clean
DIR_BUILD := build
DIR_SRC := src #源代码文件夹名
DIR_INC := inc #头文件文件夹名
TYPE_INC := .h
TYPE_SRC := .c #当为C++文件是改为.cpp
TYPE_OBJ := .o
CC := gcc #编译C++代码是改为g++
LFLAGS := #如有编译选项,则在这里添加,如-pthread
CFLAGS := -I $(DIR_INC)
ifeq ($(DEBUG),true) #DEBUG版本编译
CFLAGS += -g
endif
MKDIR := mkdir
RM := rm -fr
APP := $(DIR_BUILD)/app.out
HDRS := $(wildcard $(DIR_INC)/*$(TYPE_INC))
HDRS := $(notdir $(HDRS))
OBJS := $(wildcard $(DIR_SRC)/*$(TYPE_SRC))
OBJS := $(OBJS:$(TYPE_SRC)=$(TYPE_OBJ))
OBJS := $(patsubst $(DIR_SRC)/%, $(DIR_BUILD)/%, $(OBJS))
vpath %$(TYPE_INC) $(DIR_INC)
vpath %$(TYPE_SRC) $(DIR_SRC)
all : $(DIR_BUILD) $(APP)
@echo "Target File ==> $(APP)"
$(DIR_BUILD) :
$(MKDIR) aaa@qq.com
$(APP) : $(OBJS)
$(CC) $(LFLAGS) -o aaa@qq.com $^
$(DIR_BUILD)/%$(TYPE_OBJ) : %$(TYPE_SRC) $(HDRS)
$(CC) $(CFLAGS) -o aaa@qq.com -c $<
clean :
$(RM) $(DIR_BUILD)
本文为狄泰软件学院课程学习笔记