简单有用makefile脚本的,针对的c++ linux小项目,大项目复杂才用cmake
# 定义变量
CC = g++ # C++编译器
CFLAGS = -Wall -g # 编译选项
LDFLAGS = -lm # 链接库选项(如果需要)
SRCDIR =src
OBJDIR =obj
BINDIR =bin
TARGET =myprogram
SRCS := $(wildcard ${SRCDIR}/*.cpp) # 获取所有源文件路径列表
OBJS := $(patsubst %.cpp,$(OBJDIR)/%.o,$(notdir ${SRCS})) # 将源文件路径转换为对应的对象文件路径
DEPS := $(OBJS:$(OBJDIR)/%.o=$(OBJDIR)/%.d) # 依赖关系文件路径列表
# 默认目标
all : $(BINDIR)/$(TARGET)
# 创建目录
$(shell mkdir -p $(OBJDIR))
$(shell mkdir -p $(BINDIR))
# 生成依赖关系文件
-include $(DEPS)
# 生成对象文件
$(OBJDIR)/%.o : $(SRCDIR)/%.cpp | $(OBJDIR)
@echo "Compiling $<"
$(CC) $(CFLAGS) -MMD -MP -MT "$@" -MF $(basename $@).d -c $< -o $@
# 生成可执行文件
$(BINDIR)/$(TARGET): $(OBJS)
@echo "Linking objects to create executable file"
$(CC) $(LDFLAGS) $^ -o $@
# 清理中间文件和可执行文件
clean:
rm -rf $(OBJDIR) $(BINDIR)
.PHONY: all clean
src = $(wildcard ./*.c)
obj = $(patsubst %..c, %..o, $(src))
target = app
$(target):$(obj)
gcc $^ -o $@
%..o:%..c
gcc -c $< -o $@
.PHONY:clean
clean:
-mkdir /abc
-rm $(obj) $(target) -f