Makefile中ifeq语句功能及HIDE变量作用咨询
关于这段Makefile代码的解析
1. 条件判断的正确性
你的判断完全正确:ifeq ($(VERB),) 的作用就是检查VERB变量是否未赋值或者赋值为空字符串。当满足这两种情况之一时,条件分支成立,HIDE会被赋值为@;反之如果VERB被赋予了任意非空值,就会进入else分支,HIDE被设为空。
2. @赋值给HIDE的作用
在Makefile中,@是一个特殊前缀,作用是抑制命令本身的打印输出。默认情况下,make执行命令前会先把要运行的命令文本输出到终端,加上@后,这条命令文本就不会被打印,只会显示命令执行过程中产生的正常输出(如果有的话)。
把@赋值给HIDE,是为了通过一个统一变量来控制所有使用$(HIDE)前缀的命令是否显示命令本身,避免在每个命令前重复写@或者手动删除,提升Makefile的可维护性。
3. HIDE不同赋值的输出差异
结合你给出的使用示例$(HIDE)$(call custom-command,$(@D)),两种赋值的效果差异如下:
- 当
VERB为空时:HIDE的值是@,命令展开为@$(call custom-command,$(@D))。此时终端只会显示custom-command执行后产生的输出(如果命令有输出),不会打印这条命令本身的内容。 - 当
VERB非空时:HIDE为空,命令展开为$(call custom-command,$(@D))。此时make会先把这条展开后的命令文本打印到终端,然后再执行命令,同时显示命令执行的输出。
内容的提问来源于stack exchange,提问作者Łukasz Przeniosło
相关产品推荐
相关产品推荐

