Makefile 学习

1.1 通配符

% 代表一个或多个字符,%.o 就是代表所有以.o为结尾的文件
makefile 自动规则

1.2 makefile 定义和使用变量

直接定义使用,
引用变量$var

1.3 伪目标(.PHONY)

(1)伪目标是这个目标不是得到一个文件,执行这个目标不是为了得到某个某个文件或东西,而是单纯为了执行这个目标下面的命令:
(2)为目标一般都没有依赖,因为不加依赖就是无条件执行
(3)伪目标可以直接写,不影响使用,但有时候为了能看清可以前在面添加(.PHONY)

1.4 Makefile 中引用其他的Makefile (include)指令

1.5.1 补充学习1

 1)# 表示注释
 2)Makefile在默认执行一句命令的时候,默认会打印出该命令
 3) @表示静默执行(不想看到命令本身就用静默执行)
  1 
  2 
  3 
  4 all:
  5 echo "hello world"(前面没有TAB)
~                    

会发生Makefile:5: *** missing separator. Stop. 错误

TAB前缀意味着它是一个shell命令

  1 
  2 
  3 
  4 all:
  5         echo "hello world"
~                                                                               
~                                    

make之后的结果为
echo “hello world”
hello world

  1 
  2 
  3 
  4 all:
  5         @echo "hello world"            

make之后结果为

  • hello world

1.5.1.2几种变量赋值运算符

  1. =
    简单赋值,在被解析时,取决于最后一次执行的。
    2):= 1)和2)大多数情况下一样
    :=就地取值

# = 和 :=的区别


A=ABC
B=$(A)BCD
A=XYZ
C:=ABC
D:=$(C)BCD
C:=XYZ
all:
        @echo "B:" $(B)
        @echo "D:"$(D)
        


结果为:

B: XYZBCD
D:ABCBCD

:= 按命令当前最后一个执行的结果拿来使用(只需要往前看)

= 按所有命令最后一个执行的结果拿来使用(需要看前后)\


# = 和 :=的区别


A=ABC
B=$(A)BCD
A=XYZ
C:=ABC
D=$(C)BCD
C:=XYZ
all:
        @echo "B:" $(B)
        @echo "D:"$(D)
结果为
B: XYZBCD
D:XYZBCD
当前D使用的时等于号使用等于号的规则

3)?=
如果前面没有赋值过则执行这条赋值,如果前面已经赋值过了则本行被忽略
4)+=
用来给一个已经赋值的变量接续赋值,意思就是把这次的值加到原来的值的后面。
(续借的内容和原来的内容用空格隔开)

1.5.1.3 环境变量和全局变量

1)makefile 用export 导出的就是环境变量,一般使用大写
2)环境变量和普通变量不同,环境变量类似整个工程中所有Makefile的全局变量,所以要小心使用
3)Makefile中的一些环境变量时makefile中定义的一些内部环境变量或则时当前执行环境的环境变量(make CC=arm 其实就是给Makefile传了一个环境变量CC值为arm,make时给Makefile传的环境变量的值的优先级时最高的)

1.5.2.1 通配符

1)* 任意个字符
2)? 1个任意字符
3) [ ] 查找【】中的文件
%也是通配符,表示任意多个字符,和*很相似,但是%一般只用于规则描述中,又叫规则通配符
Makefile 还有一些wildcard等复杂的通配符 用法具体参考<<跟我一起学Makefile>

1.5.2.2 自动变量

1)文件非常多的时候
3)常见自动变量

  • $* 不包含扩展名的目标文件名称
  • $+ 所有的依赖文件,以空格分开,并以出现的先后为序,可能包含重复的依赖文件
  • $< 第一个依赖文件的名称
  • $? 所有时间戳比目标文件晚的依赖文件,并以空格分开
  • $@ 目标文件的完整名称
  • $^ 所有不重复的依赖文件,以空格分开
  • $% 如果目标是归档成员,则该变量表示目标的归档成员名称
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值