Makefile中echo -e 以及 输出$()和%.o 这两个字符串的问题

本文讨论了在Makefile中使用`echo -e`显示颜色文字时遇到的问题,以及`$()`和`%.o`字符串在Makefile中无法正确打印的困扰。问题源于Makefile默认使用的是/bin/dash,而非bash,通过设置`SHELL=/bin/bash`可解决`-e`显示问题,但`$()`和`%.o`的转义仍然是个挑战。
摘要由CSDN通过智能技术生成

背景

有次我在写makfile时,用echo -e要显示带颜色的文字,命令如下:
echo -e “Full Version is:\033[31m\033[1m v1.0 \033[0m”;
该命令在控制台中单独执行都显示正常,效果如下:

Full Version is: v1.0

可以放在makefile中一运行, 结果把-e也显示出来:

-e Full Version is: v1.0

原因

这是由于不同的shell(一个是bash,一个是dash)造成的两种不同的结果,即在bash下正常,在dash下就多显示了一个-e。
从Ubuntu 6.10开始,默认使用的shell是dash,而不是bash,原因是dash更快、更高效,使用dash可以加快启动速度。
我们可以做如下实验来验证下,先启用bash运行下指令,再启用dash试试:

$ /bin/bash
$ echo -e "Full Version is:\033[31m\033[1m v1.0 \033[0m";
Full Version is: v1.0
$ exit
exit
$
$ /bin/dash
$ echo -e "Full Version is:\033[31m\033[1m v1.0 \033[0m";
-e Full Version is: v1.0
$ exit
$

makefile用的是哪个shell

makefile默认用的shell是/bin/sh。但/bin/sh紧紧是个链接文件,到底用的是什么shell程序可以通过ls查看:

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值