[置顶] 泰晓 RISC-V 实验箱,配套 30+ 讲嵌入式 Linux 系统开发公开课
[置顶] Linux Lab v1.4 升级部分内核到 v6.10,新增泰晓 RISC-V 实验箱支持,新增最小化内核配置支持大幅提升内核编译速度,在单终端内新增多窗口调试功能等Linux Lab 发布 v1.4 正式版,升级部分内核到 v6.10,新增泰晓实验箱支持
[置顶] 泰晓社区近日发布了一款儿童益智版 Linux 系统盘,集成了数十个教育类与益智游戏类开源软件国内首个儿童 Linux 系统来了,既可打字编程学习数理化,还能下棋研究数独提升智力
Makefile 中调用 Shell 脚本
Wu Zhangjin 创作于 2014/07/24
问题描述
今天有同事问:如何在Makefile中把一个路径转换为
../
,即:usr/local/share/xml/misc/ --> ../../../../../
问题分析
这个用sed命令替换就可以,然后在Makefile中通过shell调用来实现即可。
解决方案
替换可以实现为:
$ echo "usr/local/share/xml/misc/" | sed -e "s#[^/]*#%..#%g" ../../../../../
不过在Makefile中调用有问题,不能正确工作,写Makefile如下:
A := "usr/local/share/xml/misc/" B := $(shell echo $A | sed 's#[^/]*/#../#g') all: echo $(B)
但发现如下问题:
Makefile:3: *** unterminated call to function `shell': missing `)'. Stop.
发现并没有异常,一个一个排查后,竟然是sed中使用的
#
分隔符问题,替换为%
即可。A := "usr/local/share/xml/misc/" B := $(shell echo $A | sed 's%[^/]*/%../%g') all: echo $(B)
可能是
#
在Makefile里头被解析成注释符了。
猜你喜欢:
- 我要投稿:发表原创技术文章,收获福利、挚友与行业影响力
- 知识星球:独家 Linux 实战经验与技巧,订阅「Linux知识星球」
- 视频频道:泰晓学院,B 站,发布各类 Linux 视频课
- 开源小店:欢迎光临泰晓科技自营店,购物支持泰晓原创
- 技术交流:Linux 用户技术交流微信群,联系微信号:tinylab
支付宝打赏 ¥9.68元 | 微信打赏 ¥9.68元 | |
请作者喝杯咖啡吧 |