【问题标题】:(Makefile) Multiple string replacement on the same line(Makefile) 同一行上的多个字符串替换
【发布时间】:2021-11-07 14:01:43
【问题描述】:

我有工作的makefile代码,它首先找到u文件夹中的所有文件,然后删除./u/,最后将.c的后扩展名替换为.o。有没有办法让它变成一个或两个衬里?我觉得这段代码看起来很乱,有待改进。

UTILS=$(wildcard ./u/*.c)
TEMP=$(UTILS:./u/%=%)
OBJ=$(TEMP:.c=.o)

【问题讨论】:

    标签: makefile gnu-make gnu


    【解决方案1】:

    您不能嵌套 $(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)
    

    这可能更容易阅读。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-08-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-25
      • 1970-01-01
      • 2015-12-30
      • 2022-12-15
      相关资源
      最近更新 更多