GNU Make中的双文本替换

时间:2015-08-13 08:39:05

标签: makefile 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))
           )
         )
       )
  1. 删除旧目录名称
  2. 做替换
  3. 追加新的目录名称
  4. 但这种方式显然很复杂,所以我想要一个更好的解决方案。 任何人都知道更好的解决方案吗?

1 个答案:

答案 0 :(得分:2)

我会用这个:

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

然后修复后缀:

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