【发布时间】:2015-01-11 18:16:41
【问题描述】:
我正在寻找 Makefile 宏来获取目录中所有文件的列表,这些文件是作为规则 1 处理生成的,并将此列表用于规则 2 处理。
这是我想要达到的目标:
- 规则一:生成源
.c文件(使用xml文件)并放在$(MYDIR)目录下。 - 规则2:获取
$(MYDIR)中所有文件的列表并创建目标文件并将它们放置在$(OBJDIR)中。
问题是,我想在处理完规则 1 后更新规则 2 中的文件列表,否则 $(MYDIR) 中的文件列表将为空。
all : rule_1 rule_2
rule1 : $(MYDIR)/generated_source1.c $(MYDIR)/generated_source2.c
$(MYDIR)/generated_source1.c:
xsltproc generator1.xml style_generator.xsl -o $(MYDIR)/generated_source_1.c
$(MYDIR)/generated_source2.c:
xsltproc generator2.xml style_generator.xsl -o $(MYDIR)generated_source_2.c
#Get list of all $(MYDIR).*c , create corresponding $(OBJDIR)/*.o list.
SOURCES := $(wildcard $(MYDIR)/*.c)
OBJECTS := $(notdir ${SOURCES})
GENERATED_OBJS := $(patsubst %.c,$(OBJDIR)/%.o,$(OBJECTS))
#This rule is compiling of all .c generated in rule1.
rule2 : $(GENERATED_OBJS)
ld -r -o $(OBJDIR)/generated_lib.o $(GENERATED_OBJS)
$(OBJDIR)/%.o: $(MYDIR)/%.c
gcc $(CFLAGS) -c -o $@ $<
$(SOURCES) 显示为空,但实际上它应该包含 generated_source1.c 和 generated_source2.c
我不确定.SECONDEXPANSION 规则如何适用于我的情况。
【问题讨论】:
标签: makefile