自动化Build的方法如下所示
发布日期:2021-07-14 20:03:44
浏览次数:1
分类:技术文章
本文共 1227 字,大约阅读时间需要 4 分钟。
#本文件自动进行build。##########修改如下内容进行自定义。#######PROGRAM := hello.exeSRCDIRS :=.SRCEXTS :=.cpp#########################################SOURCES := $(foreach d,$(SRCDIRS),$(wildcard $(addprefix $(d)/*,$(SRCEXTS))))OBJS := $(foreach x,$(SRCEXTS), \ $(patsubst %$(x),%.o,$(filter %$(x),$(SOURCES))))DEPS = $(patsubst %.o,%.d,$(OBJS)).PHONY : all objall : $(PROGRAM)$(PROGRAM) : $(OBJS) g++ -o $(PROGRAM) $(OBJS)objs : $(OBJS)%.d: %.cpp g++ -MM -MD $<-include $(DEPS)
关于%和*的不同:下面这段话仔细品味:
一个是变量(所有的%代表的是相同的字符串,以第一次匹配上为标准),一个是通配。 一般我们可以使用“$(wildcard *.c)”来获取工作目录下的所有的.c文件列表。复杂一些用法;可以使用“$(patsubst %.c,%.o,$(wildcard *.c))”,首先使用“wildcard”函数获取工作目录下的.c文件列表;之后将列表中所有文件名的后缀.c替换为.o。这样我们就可以得到在当前目录可生成的.o文件列表。因此在一个目录下可以使用如下内容的Makefile来将工作目录下的所有的.c文件进行编译并最后连接成为一个可执行文件: #sample Makefile objects := $(patsubst %.c,%.o,$(wildcard *.c)) foo : $(objects) cc -o foo $(objects) 这里我们使用了make的隐含规则来编译.c的源文件。对变量的赋值也用到了一个特殊的符号(:=)。关于变量定义可参考6.2 两种变量定义一节。函数“patsubst”可参考8.2 文本处理函数一节 #关于.d文件。有这两段话,帮助理解为何生成.d文件 ---makefile的包含 “include”指示符告诉make暂停读取当前的Makefile, 而转去读取“include”指定的一个或者多个文件, 完成以后再继续当前Makefile的读取。 ---makefile的更新(包括自我更新) make在读入所有makefile文件之后, 首先将所读取的每个makefile作为一个目标, 寻找更新它们的规则。 如果存在一个更新某一个makefile文件明确规则或者隐含规则, 就去更新对应的makefile文件。转载地址:https://blog.csdn.net/daojin505/article/details/76812809 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
能坚持,总会有不一样的收获!
[***.219.124.196]2024年05月03日 03时46分34秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
Java数组详解
2019-05-01
Java面向对象详解
2019-05-01
vs中动态DLL与静态LIB工程中加入版本信息的方法
2019-05-01
大数据分析技术与应用一站式学习(值得收藏)_v20200418
2019-05-01
Qt 在windows下的串口读写
2019-05-01
SpringApplication执行流程
2019-05-01
自定义Starter
2019-05-01
分布式事务原理探究(一)
2019-05-01
spring cloud consul 应用的多实例名的解决
2019-05-01
人工智能为什么这么火?看看安防江湖30年血战就知道了
2019-05-01
“前端智能为安防产生新的数据价值”
2019-05-01
高斯混合模型
2019-05-01
(8)CMake入门笔记--CMake语法
2019-05-01
3D点云图实验
2019-05-01
头文件中 #ifndef---#define---#endif的作用
2019-05-01
分析Linux内核启动过程:从start_kernel到init
2019-05-01
系统调用过程的理解
2019-05-01
Ant内置任务之whichresource
2019-05-01
Ant内置任务之symlink
2019-05-01