Sed 在makefile中连接两个字符串列表
在mySed 在makefile中连接两个字符串列表,sed,makefile,gnu,Sed,Makefile,Gnu,在mymakefile中有一个包含所有源文件的变量: SOURCES := $(shell find $(SRCDIR) -type f -name *.$(SRCEXT)) 现在我想创建一个DEPFILES,它包含与源文件相同的文件,但有两个主要区别: 每个文件以“.d”而不是“.c”结尾 每个文件的basename前都包含一个“.”,因此生成的文件是隐藏的 我想出了一个很好的表达方式: DEPFILES := $(foreach s,$(SOURCES:.$(SRCEXT)=.$(DEPS
makefile
中有一个包含所有源文件的变量:
SOURCES := $(shell find $(SRCDIR) -type f -name *.$(SRCEXT))
现在我想创建一个DEPFILES
,它包含与源文件相同的文件,但有两个主要区别:
每个文件以“.d”而不是“.c”结尾
每个文件的basename前都包含一个“.”,因此生成的文件是隐藏的
我想出了一个很好的表达方式:
DEPFILES := $(foreach s,$(SOURCES:.$(SRCEXT)=.$(DEPSEXT)),$(shell echo $(s) | sed -e 's/^\(.*\/\)/\1./')))
最初,我将源划分为以下列表:
PRE := $(dir $(SOURCES))
SUF := $(addprefix ".", $(notdir $(SOURCES)))
问题:如何在makefile中连接这两个列表,使结果等于DEPFILES
?换句话说:如何成对地从两个列表中提取字符串?这里有一个更简单的方法,只使用makefile而不使用shell-如果我理解您的要求,好的:
SRCS += bob/src1.c fred/src2.c src3.c
DEPS=$(join $(addsuffix ., $(dir $(SRCS))), $(notdir $(SRCS:.c=.d)))
# Some debug:
$(info 1. $(SRCS))
$(info 2. $(SRCS:.c=.d))
$(info 3. $(notdir $(SRCS:.c=.d)))
$(info 4. $(dir $(SRCS)))
.PHONY: all
all:
@echo SRCS: $(SRCS)
@echo DEPS: $(DEPS)
我将输出分解为多个步骤,这样您就可以看到每个部分都做了什么-省去了我的解释
产出:
1. bob/src1.c fred/src2.c src3.c
2. bob/src1.d fred/src2.d src3.d
3. src1.d src2.d src3.d
4. bob/ fred/ ./
SRCS: bob/src1.c fred/src2.c src3.c
DEPS: bob/.src1.d fred/.src2.d ./.src3.d
你用GNUmake吗<代码>$(加入列表1、列表2)
可以做到这一点。