GNU Make中的双文本替换(double text substituion in GNU Make)

编程入门 行业动态 更新时间:2024-10-25 08:22:26
GNU Make中的双文本替换(double text substituion in GNU Make)

假设我有这样的源文件列表。

SRCS = A/src/A1.c A/src/A2.c B/src/B1.c B/src/B2.c

我想从上面的列表中找到对象文件列表。

OBJS = A/obj/A1.o A/obj/A2.o B/obj/B1.o B/obj/B2.o

我想写这样的东西。

OBJS = $(SRCS: %1/src/%2 = %1/obj/%2)

但由于GNU make中没有提供此功能,我需要考虑解决方法。 目前我正在使用它。

SRCS = $(foreach DIR, A B, $(wildcard $(DIR)/src/*.c)) OBJS = $(foreach DIR, A B, $(addprefix $(DIR)/obj/, $(patsubst %.c, %.o, $(notdir $(wildcard $(DIR)/src/*.c)) ) ) ) 删除旧目录名称 替代 附加新的目录名称

但这种方式显然很复杂,所以我想要一个更好的解决方案。 有人知道更好的解决方案吗?

suppose I have source file list like this.

SRCS = A/src/A1.c A/src/A2.c B/src/B1.c B/src/B2.c

I want objects file list from above list.

OBJS = A/obj/A1.o A/obj/A2.o B/obj/B1.o B/obj/B2.o

I want to write something like this.

OBJS = $(SRCS: %1/src/%2 = %1/obj/%2)

But since this feature is not provided in GNU make, I need to think up workaround. Currently I'm using this.

SRCS = $(foreach DIR, A B, $(wildcard $(DIR)/src/*.c)) OBJS = $(foreach DIR, A B, $(addprefix $(DIR)/obj/, $(patsubst %.c, %.o, $(notdir $(wildcard $(DIR)/src/*.c)) ) ) ) remove old dir name do substitution append new dir name

But this way is obviously complicated so I want a better solution. Anyone know better solution to this?

最满意答案

我会用这个:

OBJS := $(subst /src/,/obj/,$(SRCS))

然后修复后缀:

OBJS := $(patsubst %.c,%.o, $(subst /src/,/obj/,$(SRCS)))

I would use this:

OBJS := $(subst /src/,/obj/,$(SRCS))

And then fix the suffix:

OBJS := $(patsubst %.c,%.o, $(subst /src/,/obj/,$(SRCS)))

更多推荐

本文发布于:2023-07-31 20:23:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1347225.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:文本   GNU   double   substituion   text

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!