GCC学习 (四)如何编写makefile

本文介绍如何在Makefile中实现嵌套执行,包括如何调用子目录下的Makefile文件,变量的传递方法,宏定义的使用及展开过程。同时讲解了变量赋值和避免无限递归的方法。

接上一篇

  • makefile嵌套执行

要执行另外一个makefile文件,若该文件在子目录下,可以这样执行:

----

伪目标:

  $(MAKE) -C subdir

----

$(MAKE) -C 可以用来执行subdir目录下的makefile

 

  • 变量传递

如果在父makefile中已经定义了一个变量,要传递到子makefile里面,需要使用export 关键字

----

export 变量

----

要传递所有变量时,可以不写变量

  • 宏定义
define run-yacc
yacc $(firstword $^)
mv y.tab.c $@
endef

上面是宏定义的使用方法

define endef 中间为定义部分,使用的时候,使用方法为

foo.c : foo.y
  $(run-yacc)

makefile遇到宏定义,展开为上述定义部分

该定义yacc一行为运行yacc命令

第二行为修改生成的y.tab.c 为目标名,显然这里的目标名就是foo.c

  • 变量的使用

当定义变量时,使用等号来完成赋值,使用$() 来引用

变量会在引用处按原值展开,类似于c语言宏定义

两个变量如果相互赋值,则会发生无穷展开,make检测到就会报错

例如

a=$b

b=$a

为了避免出现这种情况,需要使用另外一种赋值方式:= 该方式比较常用

  • 嵌套变量

MAKELEVEL表示当前makefile 的层数

 

转载于:https://www.cnblogs.com/linanwx/p/5524646.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值