Makefile之学习总结(3)--- Makefile (v2.0)
来源:互联网 发布:颜值测试软件 编辑:程序博客网 时间:2024/05/22 05:00
在Makefile之学习总结(2) --- Makefile(v1.0)文章给出的Makefile具有以下几个特点:
1)支持指定平台的make命令,如:make platform=m64x86
2)需要手动添加源码目录
3)自动添加Include目录,但只支持L2级目录,仅形如后面两种:./Include和./Include/gtest
4)所有.o目标文件都编译生成到指定一个目录下./objs
5)不支持生成本工程的.a库(暂时不打算支持)
其中2)和3)是本版Makefile v1.0的局限性。
在本章将会优化Makefile v1.0的2)和3)以及4),本章的Makefile v2.0会有以下几个特点:
1)支持指定平台的make命令,如:make platform=m64x86
2)自动添加所有的源码目录
3)自动添加所有的include目录
4)所有.o目标文件都编译生成到对应的.cpp所在目录
5)不支持生成本工程的.a库以及.so动态库(暂时不打算支持)
注:相关工程结构请查看 Makefile之学习总结(1)和 Makefile之学习总结(2)
Makefile v2.0如下所示:
#Makefile v2.0####设置target.PHONY:all help srcs includes objs platforms ldflags cxxflags a.out all: srcs help includes objs platforms ldflags cxxflags a.out###set complierCC=gccCPP=g++RM=rm####set pathsPWD:=$(shell pwd)ALL_DIRS:=$(shell find $(PWD) -type d)vpath %.cpp $(ALL_DIRS)vpath %.c $(ALL_DIRS)vpath %.h$(ALL_DIRS)###创建源文件集合(绝对路径)src_files:=$(foreach dir, $(ALL_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)elseplatform=m64x86endif####设置LDFLAGSLDFLAGS += -L$(PWD)/Depend/$(platform)LDFLAGS += -Igtest.a -lrt -lpthread####设置CXXFLAGSCXXFLAGS += -Wall -g -lpthread -lstdc++ CXXFLAGS += $(addprefix -I, $(ALL_DIRS))#CXXFLAGS += $(foreach dir, $(include_dirpaths), -I$(dir))###编译生成所有的目标文件$(OBJS):%.o:%.cpp$(CPP) $(CXXFLAGS) -c $< -o $@###链接生成最终可执行文件TARGET = a.out$(TARGET):$(OBJS)$(CPP) -o $@ $^ $(LDFLAGS).PHONY: clean cleanall cleanobjclean:cleanall cleanobj@-$(RM) $(TARGET)cleanall:cleanobj@-$(RM) $(OBJS)#####debugsrcDirs:@echo "=======srcDirs========="@echo $(ALL_DIRS)@echo "************************"includeDirs:@echo "=======includeDirs========="@echo $(ALL_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 0
- Makefile之学习总结(3)--- Makefile (v2.0)
- Makefile之学习总结(2)--- Makefile (v1.0)
- Makefile之学习总结(4)--- Makefile (v3.0)
- Makefile之学习总结(5)--- Makefile (v4.0)
- makefile通用文件v2.0
- Makefile之学习总结(1)---工程搭建
- Makefile基础 -- Unix学习总结之二
- makefile学习总结
- makefile学习总结
- makefile学习总结-----基础知识
- makefile学习总结
- makefile----学习笔记总结
- makefile学习总结
- Makefile 学习总结
- makefile学习总结
- makefile 学习总结
- Makefile学习总结
- makefile总结之二
- 05-java面向对象初识
- J2EE使用hibernate存储和显示BLOB图片(从页面到数据库)
- web前端CSS开发中的10个不要
- 【连载】研究EasyUI系统——控件构造形式
- mybatis foreach
- Makefile之学习总结(3)--- Makefile (v2.0)
- BZOJ 2038 小Z的袜子(hose) 莫队算法
- Ubuntu下MySQL的安装、配置、启动、停止、重启、乱码问题
- java源码:LinkedHashMap
- unity3d 25
- 16-08-05道路
- 两个栈实现一个队列
- iOS集成极光推送,绕过一些坑
- [HDU5799] This world need more Zhu [2016 Multi-University Training Contest 6(2016多校联合训练2) 1007]