随笔 - 191  文章 - 0  评论 - 312  阅读 - 39万

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))

说明:
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不检测:后面的项是否存在同名的文件

posted on   万俊峰Kevin  阅读(491)  评论(0编辑  收藏  举报
编辑推荐:
· 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)
< 2005年5月 >
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31 1 2 3 4
5 6 7 8 9 10 11

点击右上角即可分享
微信分享提示