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 的作用

MakefileMakefile 中 LINUXINCLUDE 的作用

Makefile基础

makefile

makefile