版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/xiaoxu2050/article/details/83928161
语法
makefile可以输出三个级别的调试信息,error,warning和info
$(error ...)
$(warning ...)
$(info ...)
例如:
$(info Makefile Start ......)
var= abc
$(info $$var is $(var));
输出:
Makefile Start ......
$var is abc
其中error、warning、info均为makefile函数。$$表示输出一个$符号
示例
使用调试信息,测试递归赋值和直接赋值的区别
$(info Makefile Start ......)
#recursively expanded variables
var_rev = $(info info: expanded 1)abc123
var2_rev = $(info info: expanded 2)$(var_rev)
#simply expanded variables
var_sev := $(info info: myvar_1 assign to myvar)myvar_1
var_sev := $(info info: myvar_2 assign to myvar)myvar_2
shell_info := $(shell echo echo_message)
all:
$(info $$var2_rev is ${var2_rev})
$(info $$var_sev is ${var_sev})
$(info $$var_sev is $(var_sev))
$(info $$shell_info is $(shell_info))
执行make,输出内容:
Makefile Start ......
info: myvar_1 assign to myvar
info: myvar_2 assign to myvar
info: expanded 2
info: expanded 1
$var2_rev is abc123
$var_sev is myvar_2
$var_sev is myvar_2
$shell_info is echo_message
分析:
- var_sev是直接赋值,所以输出b,c的两句调试信息
- var2_rev是递归赋值会延迟展开,在执行目标all的第一句时中引用${var2_rev},这时展开var2_rev输出的语句d;
- var2_rev赋值过程中又引用了var_rev,这时展开var_rev输出语句e。