makefile - (Makefile) 同一行上的多个字符串替换
问题描述
我有工作 makefile 代码,它首先找到文件u
夹中的所有文件,然后删除./u/
并最后替换.c
to的后扩展名.o
。有没有办法让它变成一个或两个衬里?我觉得这段代码看起来很乱,可以改进。
UTILS=$(wildcard ./u/*.c)
TEMP=$(UTILS:./u/%=%)
OBJ=$(TEMP:.c=.o)
解决方案
你不能嵌套$(var:x=y)
样式替换,但你可以嵌套等效的patsubst
函数调用,所以你可以这样写:
OBJ=$(patsubst %.c, %.o, $(patsubst ./u/%,%,$(wildcard ./u/*.c)))
您可以简化为:
OBJ=$(patsubst ./u/%.c,%.o,$(wildcard ./u/*.c))
但是考虑到这种简化,您可以对原始版本执行相同的操作:
UTILS=$(wildcard ./u/*.c)
OBJ=$(UTILS:./u/%.c=%.o)
这可能更容易阅读。
推荐阅读
- java - 选择随机数组元素
- javascript - React Native - 如何选择图像然后发送到另一个屏幕
- java - Maven 清理问题 - 不可解析的导入 POM - 无法从 NEXUS 传输工件
- java - doThrow() 有效,但 thenThrow() 无效
- r - 使用批处理文件中的共享网络的连接字符串
- node.js - 在 heroku 上部署节点后端后出现错误 503。有谁知道为什么会这样?
- html - 根据文本文件上的内容更改以 HTML 编写的网站
- excel - 在 Excel 中查找最大值并返回具有重复项的相邻单元格值
- c# - IExtensionConfigProvider 未初始化或与 Microsoft.Azure.WebJobs v3 绑定
- typescript - 派生类中的打字稿推断函数参数