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.cI want objects file list from above list.
OBJS = A/obj/A1.o A/obj/A2.o B/obj/B1.o B/obj/B2.oI 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 nameBut 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)))更多推荐
发布评论