Makefile中$(VARIABLE:/text=)语法及MY_DIR变量声明含义解析
解释Makefile中
MY_DIR ?= $(MY_CLOUD:/cloud=)的语法含义 你对?=的理解是对的:只有当MY_DIR还未被赋值时,才会执行后面的赋值操作。重点说你疑惑的$(MY_CLOUD:/cloud=)——这是Makefile的字符串替换语法,和判断变量是否为空完全无关。
替换语法的具体规则
这个语法的格式是$(变量名:待替换子串=新子串),作用是把变量值里所有匹配待替换子串的部分,替换成新子串。在你的代码里,待替换子串是/cloud,新子串是空(等号后面没有内容),所以实际效果是:把MY_CLOUD的值里所有的/cloud子串都删掉。
举几个实际例子:
- 若
MY_CLOUD = /home/user/cloud,替换后结果是/home/user - 若
MY_CLOUD = cloud/dev/cloud,替换后结果是/dev - 若
MY_CLOUD本身是空值或者不包含/cloud,替换结果就和MY_CLOUD原值一致(比如MY_CLOUD = /tmp,替换后还是/tmp;MY_CLOUD =,替换后还是空)
整行代码的完整逻辑
把两部分结合起来,整段代码的作用是:
- 先通过
$(shell ....)执行一段shell命令,把输出结果赋值给MY_CLOUD - 如果
MY_DIR从未被定义过,就将它设置为MY_CLOUD去掉所有/cloud子串后的结果
内容的提问来源于stack exchange,提问作者MeanwhileInHell
相关产品推荐
相关产品推荐

