Makefile之学习总结(5)--- Makefile (v4.0)

Makefile 4.0的特点:

1)支持指定平台的make命令,如:make platform=m64x86

2)自动添加所有的源码目录(非源码文件所在目录不会被添加进去)

3)自动添加所有的include目录(非Include目录不会被添加进去)

4)所有.o目标文件都编译生成到对应的.cpp所在目录

5)不支持生成本工程的.a库以及.so动态库(暂时不打算支持)


Makefile 4.0内容如下所示:

注:OBJS:=$(sort $(OBJS)),这句的功能是对OBJS中的目标文件去重。

#Makefile v4.0
####设置target
.PHONY:all help srcs includes objs platforms ldflags cxxflags a.out 
all: srcs help includes objs platforms ldflags cxxflags a.out
###set complier
CC=gcc
CPP=g++
RM=rm

####set paths
PWD:=$(shell pwd)
SRC_DIRS:=$(PWD)
SRC_DIRS+=$(PWD)/Src
SRC_DIRS+=$(shell find $(PWD)/Src -type d)
INCLUDE_DIRS:=$(SRC_DIRS)
INCLUDE_DIRS+=$(PWD)/Include
INCLUDE_DIRS+=$(shell find $(PWD)/Include -type d)
ALL_DIRS:=$(shell find $(PWD) -type d)
vpath %.cpp $(ALL_DIRS)
vpath %.c   $(ALL_DIRS)
vpath %.h	$(ALL_DIRS)

###创建源文件集合(绝对路径)
src_files:=$(foreach dir, $(SRC_DIRS), $(wildcard $(dir)/*.cpp))

###创建目标文件集合(绝对路径)
OBJS:=$(src_files:%.cpp=%.o)
#OBJS:=$(src_files:.cpp=.o)
#OBJS:=$(patsubst %.cpp,%.o,$(src_files))

###获取make platform=64x86中的m64x86平台名称
ifneq ($(PLATFORM), )
platform=$(PLATFORM)
else
platform=m64x86
endif

####设置LDFLAGS
LDFLAGS += -L$(PWD)/Depend/$(platform)
LDFLAGS += -Igtest.a -lrt -lpthread

####设置CXXFLAGS
CXXFLAGS += -Wall -g -lpthread -lstdc++ 
CXXFLAGS += $(addprefix -I, $(INCLUDE_DIRS))
#CXXFLAGS += $(foreach dir, $(INCLUDE_DIRS), -I$(dir))

###编译生成所有的目标文件
OBJS:=$(sort $(OBJS))
$(OBJS):%.o:%.cpp
	$(CPP) $(CXXFLAGS) -c $< -o $@

###链接生成最终可执行文件
TARGET = a.out
$(TARGET):$(OBJS)
	$(CPP) -o $@ $^ $(LDFLAGS)

.PHONY: clean cleanall cleanobj
clean:cleanall cleanobj
	@-$(RM) $(TARGET)
cleanall:cleanobj
	@-$(RM) $(OBJS)

#####debug
srcDirs:
	@echo "=======srcDirs========="
	@echo $(SRC_DIRS)
	@echo "************************"
includeDirs:
	@echo "=======includeDirs========="
	@echo $(INCLUDE_DIRS)
	@echo "************************"
srcs:
	@echo "=======srcs========="
	@echo $(src_files)
	@echo "************************"
objs:
	@echo "=======objs========="
	@echo $(OBJS)
	@echo "************************"
platforms:
	@echo "=======platforms========="
	@echo $(platform)
	@echo "************************"
ldflags:
	@echo "=======LDFLAGS========="
	@echo $(LDFLAGS)
	@echo "************************"
cxxflags:
	@echo "=======CXXFLAGS========="
	@echo $(CXXFLAGS)
	@echo "************************"
help:
	@echo make srcDirs
	@echo make srcDirs
	@echo make includeDirs
	@echo make srcs
	@echo make objs
	@echo make platforms
	@echo make ldflags
	@echo make cxxflags
	@echo make a.out
	@echo make clean
	@echo make cleanall
	@echo make cleanobj

运行结果如下所示:



(END)

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值