makefile相关知识

一、makefile注意事项:

1、makefile工程管理工具:帮助我们实现项目的自动编译。

2、在C语言中,只有源文件才会参与编译,makefile能够帮助我们整个项目的源文件,例如只有某些文件修改了才会被编译,以及那些需要先编译,那些文件后编译。

3、makefile是一个有很多规则的文件,由make这个工具来执行。

4、makefile中的一条规则由以下几个部分组成:

目标: 依赖

​ 命令列表

①、其中第一条规则中的“目标”,将会成为终极目标,其他的规则没有必然的顺序。

②、每一个规则中目标,不一定要有依赖。

③、每一个规则中的目标,都可以是一个文件,也可以是一个标签。

④、每一个规则中目标,不一定非要有命令列表。

⑤、makefile是根据文件的时间信息,来判断是否需要重新编译。

⑥、makefile使用#号注释的。

⑦、如果想取消某一条命令本身的打印,那么可以在这个命令的前面加上@符号。

二、makefile变量赋值方式

B := $A :被称为立即展开赋值

c = $A =被称为延迟展开赋值

D ?= $A ?=被称为条件赋值,当D之前没有赋过值时,将A的值赋给它;否则保持原值。

E += $A +=被称为追加赋值,将A的值空格拼接在E之前的值后面。

Makefile有三个非常有用的变量。分别是 @ , @, @^,$<代表的意义分别是:

@ − − 目 标 文 件 , @--目标文件, @^–所有的依赖文件, < − − 第 一 个 依 赖 文 件 。 <--第一个依赖文件。 <$是当前执行的进程的进程编号。

$*模式规则中的所有%匹配的部分。

$?模式规则中所有比所在规则中的目标更新的文件组成的列表。

%号万能匹配符,如%.c %.o。

makefile还有很多的隐含规则,可以用make -p查找。

如果我们没有显示写明某些规则,那么make会去隐含规则中查找有没有相应的规则,如果还没有,曹辉报错退出。

-I DIR 当包含其他 makefile 文件时,可利用该选项指定搜索目录

https://blog.csdn.net/qq1452008/article/details/50855810/?utm_medium=distribute.pc_relevant.none-task-blog-2defaultbaidujs_baidulandingword~default-0.pc_relevant_aa&spm=1001.2101.3001.4242.1&utm_relevant_index=3

Makefile学习笔记:https://blog.csdn.net/qq_37863891/article/details/90242940

伪目标:不是一个真正的目标,仅仅是为了执行其所在规则下面的命令,不应该让make来判断它是否存在,或者是否应该被生成。

.PHONY后面声明的是伪目标。

主makefile 子makefile

直接加路径前缀进去编译,并且将.o文件统一生成到makefile同级的某个目录下,最后链接该目录下的所有.o.

*makefile*中*调用*其他*makefile*

2021-06-18 10:02:55

看到一个将多个makefle文件汇总到一个makefile里的方法,记录一下,希望以后能用到。
步骤1:首先指定子makefile的路径

sub_makefile := $(wildcard $(DIR)/XXX/*/makefile)

*表示匹配XXX目录下的所有文件夹

步骤2:遍历所有makefile

all_makefiles = $(foreach n, $(sub_makefile), $(n))

步骤3:include到父makefile

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值