Makefile的编写方法
#############################################################################
# Makefile
#############################################################################
####### Compiler, tools and options
CXX = g++
CPPFLAGS = -pipe -Wall -W -pthread -g -D_REENTRANT
INCPATH = .
LIBS =
EXECUTABLE =
RM = rm -rf
SRCS = $(wildcard *.cc)
OBJS = $(patsubst %.cc,%.o,$(SRCS))
DEPS = $(patsubst %.o,%.d,$(OBJS))
CPPFLAGS += -MMD $(addprefix -I, $(INCPATH))
MISSING_DEPS = $(filter-out $(wildcard $(DEPS)),$(DEPS))
MISSING_DEPS_SRCS = $(wildcard $(patsubst %.d,%.cc,$(MISSING_DEPS)))
.PHONY : everything deps objs clean veryclean rebuild
everything : $(EXECUTABLE)
deps : $(DEPS)
objs : $(OBJS)
clean :
@$(RM) $(OBJS)
@$(RM) $(DEPS)
veryclean: clean
@$(RM) $(EXECUTABLE)
rebuild: veryclean everything
ifneq ($(MISSING_DEPS),)
$(MISSING_DEPS):
@$(RM) $(patsubst %.d,%.o,$@)
endif
-include $(DEPS)
$(EXECUTABLE) : $(OBJS)
$(CXX) -o $(EXECUTABLE) $(OBJS) $(addprefix -l,$(LIBS))
# Makefile
#############################################################################
####### Compiler, tools and options
CXX = g++
CPPFLAGS = -pipe -Wall -W -pthread -g -D_REENTRANT
INCPATH = .
LIBS =
EXECUTABLE =
RM = rm -rf
SRCS = $(wildcard *.cc)
OBJS = $(patsubst %.cc,%.o,$(SRCS))
DEPS = $(patsubst %.o,%.d,$(OBJS))
CPPFLAGS += -MMD $(addprefix -I, $(INCPATH))
MISSING_DEPS = $(filter-out $(wildcard $(DEPS)),$(DEPS))
MISSING_DEPS_SRCS = $(wildcard $(patsubst %.d,%.cc,$(MISSING_DEPS)))
.PHONY : everything deps objs clean veryclean rebuild
everything : $(EXECUTABLE)
deps : $(DEPS)
objs : $(OBJS)
clean :
@$(RM) $(OBJS)
@$(RM) $(DEPS)
veryclean: clean
@$(RM) $(EXECUTABLE)
rebuild: veryclean everything
ifneq ($(MISSING_DEPS),)
$(MISSING_DEPS):
@$(RM) $(patsubst %.d,%.o,$@)
endif
-include $(DEPS)
$(EXECUTABLE) : $(OBJS)
$(CXX) -o $(EXECUTABLE) $(OBJS) $(addprefix -l,$(LIBS))
说明: 1,CPPFLAGS里面的-MMD是针对gnu的compilers的,跟-MD(其他compilers)的区别是-MMD去掉了depends里面的系统的头文件(使用#include 的头文件) 2,@$(RM) $(OBJS),这里的@是让编译的时候不显示这条命令,gnu make默认是显示命令的 3,-include $(DEPS),前面的-号是为了忽略当后面的文件不存在的errors 4,.PHONY : everything deps objs clean veryclean rebuild,这句是为了让make不检测:后面的项是否存在同名的文件 |
|
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 上周热点回顾(3.3-3.9)