通俗理解makefile


本文抛开原理角度,仅在使用层面上介绍了makefile的特点和最基本的使用方法

基本规则

#++++++++++++++++++++Makefile++++++++++++++++++++#
规则X:规则A 规则B 规则C      #这个规则可以是makefile内的一条make规则
	命令1                        #也可以是当前路径下 存在的同名文件
	命令2                        #只要符合这两个条件,make时就不会报错
规则A:
	命令1
	命令2

#++++++++++++++++++++++++++++++++++++++++++++#
#如果直接使用make而不指明规则时,Makefile会执行文件中的第一条规则
#当然,也会执行第一条规则的依赖规则
#++++++++++++++++++++++++++++++++++++++++++++#

连续执行shell命令

#++++++++++++++++++makefile的shell连续机制++++++++++++++++++++#
exec1:
	cd /home/xiaotu
	pwd            #这样pwd打印出来的会是makefile的所在目录
exec2:
	cd /home/xiaotu ; pwd  #这样打印出来的才是xiaotu
			      #用分号把两条命令隔开是希望第二条命令能
			      #在第一条命令的基础下执行
#++++++++++++++++++++++++++++++++++++++++++++#			  

命令标志符“-”和“@”

#++++++++++++++++++命令标志++++++++++++++++++++#
exec3:
	cd whatthefuck?
	echo "do exec3"
exec4:
	-cd whatthefuck?  #在命令面前使用减号前缀,代表
	echo "do exec3"   #如果该条命令会执行出错,那么也
			  #不要在意这条错误,继续向下执行
execn:
	@echo "do exec3"  #makefile在执行shell时,会将shell打印出来
			  #在命令面前使用@号前缀,就不会打印。 
#+++++++++++++++++++++++++++++++++++++++++++++++#  

变量及变量的赋值方法

#+++++++++++++++++++++变量++++++++++++++++++++++#
#变量的普通赋值
obj = ${obj_are} you #用花括号和小括号引用变量都可以
obj_are = are
exec5:${obj}  
are:
	echo ${obj} 
you:
	echo $$     #两个$$就代表$字符本身
	            #切记注意,在makefile里玩shell的
		    #变量,不要忘记用两个$$


#变量的冒号赋值
#代表改行所引用的变量必须是上文中
#已经出现过的变量,如果上文中从未出现过,那么就视为空变量
a_obj := ${a_obj_are} you 
a_obj_are := are
exec6:  
	echo ${a_obj}     


#变量的问号赋值
#含义是:如果该变量在上文中没有被定义过,就执行该赋值语句
#如果被定义过,那么该行什么都不做
b_obj = hello
b_obj = hi
b_obj ?= thanks
exec7:  
	echo ${b_obj}     

#变量的加号赋值
#加号赋值可以为变量追加值
#如果要追加值的变量,在上文中曾使用过冒号赋值,那么
#加号赋值也保留其冒号的属性
c_obj += a
c_obj += b
c_obj += c
exec8:  
	echo ${c_obj}     
#+++++++++++++++++++++++++++++++++++++++++++++++#  

内置条件判断语句

#++++++++++++++makefile内置条件判断语句+++++++++#
testname = 
exec9:
ifeq (${testname},)
	$(error plase input testname) #error是makefile的错误弹出语句
else
	echo ${testname}
endif
#makefile也内置支持 ifneq ifdef ifndef
#+++++++++++++++++++++++++++++++++++++++++++++++#  

符号变量

#++++++++++++++++++++++符号++++++++++++++++++++++#
#乘方变量\圈变量\小于号变量
exec10:exec11 exec12
	echo "$^,$@"  #^代表冒号右侧规则,@代表冒号左侧规则
	echo "$<"     #<代表冒号右侧规则的第一个规则

#百分号 和 星号变量
#测试时执行“make xx_abcd” 结果就是-> echo abcd
#测试时执行“make xx_efgh” 结果就是-> echo efgh
#百分号是个通配符
#星号也就指代百分号那一部分
xx_%:
	echo $*  
#+++++++++++++++++++++++++++++++++++++++++++++++#  
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

搞IC的那些年

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值