makefile中,一条规则的命令结束的标志

标题可能无法表达出我的疑惑。在我们写makefile的时候,每一个规则都有对应的命令,那么,make怎么知道规则的最后一条命令是什么呢?一条规则的命令到哪里结束?如果不搞清楚,可能就会对阅读甚至编写make产生误解。

例如正常的规则编写应该是这样的:


如果目标下空了一行,如下图:


按我之前的理解,此时的echo命令并不归属于test规则【这是错误的理解!】,然而在我看大神的makefile的时候,却惊讶地发现是允许在目标与命令之间空行的。这是非常简单的情况,如果之间再掺杂了if\ifndef\define等等又会怎么样呢?就简单来说,make如何解析一个规则的命令的结束?

由于在网上找不到资料,而我学习的文档《跟我一起学makefile-陈皓》里又没讲清楚,因此以下仅仅是我的测试结果。由于精力与见识有限,不可能测试完整,或完全测试正确,若有错误地地方,或者你们能找到解答我疑惑的文章,务必告诉我,让我们一起进步。

======================================================================================

测试结论:

1、空行、ifeq、define、ifndef等并不识别为命令集的结束

2、新的目标或者变量定义会识别为命令集的结束

简言之:

一条规则的命令会一直向下搜索,直到遇到非命令相关的部分(例如目标,变量定义等)【命令相关的部分包括条件判断,命令包】

=======================================================================================

测试1:


结论1:命令会一直向下执行,而ifdef\ifeq是对命令是否执行的选择,define是对命令的封装,均属于命令类,因此会一直执行到TEST:=string_again


测试2:


结论2:由于第一个目标的命令遇到TEST变量的定义而结束了,因此24行的命令为非法命令,导致make无法执行


此博客为本人学习makefile中的部分学习思考,由于还在学习积累中,难免会有些幼稚与错误,希望指正

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值