Makefile
Posted yuehuiluan
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Makefile相关的知识,希望对你有一定的参考价值。
1.1.1 Makefile
1.1.1.1 简单编译
预
a.c b.c ===== app 经过 编译 编译
连接
汇编
简单:Gcc -o test a.c b.c -v
经过:
a.c ===== xx.s =====xx.o
======= test
B.c ===== yy.s ===== yy.o
缺点:
对所有文件都在处理一次
应该分别编译,最后连接在一起
只处理修改过的文件
Makefile就是通过比较文件时间来做的
1.1.1.2 使用makeflie
规则:
目标文件:依赖文件
[tab]命令
当依赖文件比目标文件新是就会执行下面的命令
1.1.1.2.1 Makeflie语法
通配符:%.o
假象目标:.PHONY
即时变量、延时变量、export
通配符:%.o
$@ 表示目标
$< 表示第一个依赖文件
$^ 表示所有依赖文件
假想目标:
Make [目标] 第一个的话就可以略去目标文件
.PHOWY 定义目标为假想目标
即时变量、简单变量
A := xxx # A的值即刻确定,在定义时即确定
B = xxx # B的值使用到时才确定
:= # 即时变量
= # 延时变量
?= # 延时变量, 如果是第1次定义才起效, 如果在前面该变量已定义则忽略这句
+= # 附加, 它是即时变量还是延时变量取决于前面的定义
参考文档:
a. 百度搜 "gnu make 于凤昌"
b. 官方文档: http://www.gnu.org/software/make/manual/
如果想深入, 可以学习这视频:
第3期视频项目1, 第1课第4节_数码相框_编写通用的Makefile_P
1.1.1.3 Makefile函数
a. $(foreach var,list,text)
b. $(filter pattern...,text) # 在text中取出符合patten格式的值
$(filter-out pattern...,text) # 在text中取出不符合patten格式的值
c. $(wildcard pattern) # pattern定义了文件名的格式,
# wildcard取出其中存在的文件
d. $(patsubst pattern,replacement,$(var)) # 从列表中取出每一个值
# 如果符合pattern
# 则替换为replacement
1.1.1.4 Makefile实例
a. 改进: 支持头文件依赖
http://blog.csdn.net/qq1452008/article/details/50855810
gcc -M c.c // 打印出依赖
gcc -M -MF c.d c.c // 把依赖写入文件c.d
gcc -c -o c.o c.c -MD -MF c.d // 编译c.o, 把依赖写入文件c.d
b. 添加CFLAGS
c. 分析裸板Makefile
2019年11月25日08:41:20
以上是关于Makefile的主要内容,如果未能解决你的问题,请参考以下文章
MakefileMakefile 中 LINUXINCLUDE 的作用
MakefileMakefile 中 LINUXINCLUDE 的作用