【发布时间】:2012-06-25 02:55:33
【问题描述】:
我想对从flex 和bison 生成的文件使用自动依赖生成。
现在,我正在这样做:
CSRC=$(wildcard *.c)
OSRC=grammar.y scanner.l
OUTPUT_DIR="../bin"
SOLIDC_OBJS=solid_ast.o solid_strbuf.o solid_strlit.o solidc.o
SOLIDL_OBJS=solidl.o solid_ast.o solid_strbuf.o
CFLAGS += -MD -MP
CC=clang
BISON=bison
FLEX=flex
MKDIR=mkdir -p
all: solidc
solidc: setup $(SOLIDC_OBJS)
$(BISON) -vd grammar.y
$(FLEX) --header-file=scanner.yy.h -o scanner.yy.c scanner.l
$(CC) -o $(OUTPUT_DIR)/$@ $(SOLIDC_OBJS) scanner.yy.o grammar.tab.o
setup:
@$(MKDIR) $(OUTPUT_DIR)
run:
$(OUTPUT_DIR)/$(OUTPUT_NAME)
clean:
$(RM) $(wildcard $(OUTPUT_DIR)/*) $(wildcard *.o) $(wildcard *.d) \
$(wildcard scanner.yy.*) $(wildcard grammar.tab.*) \
$(wildcard grammar.output)
-include $(SRC:%.c=%.d) scanner.yy.d grammar.tab.d
但这不起作用,因为scanner.yy.d 和grammar.tab.d 永远没有机会生成。
解决此问题的最佳方法是什么?
请注意,这个问题实际上与 GNU make: Generating automatic dependencies with generated header files, 因为我使用的是“效率较低”
-include方法而不是sef,还有很多其他的东西。
【问题讨论】:
-
我对 flex 和 bison 不是很熟悉。显示的
$(FLEX)和$(BISON)命令是否生成scanner.yy.d和grammar.tab.d?或者如果他们不知道,你知道其他命令吗? -
没有。它们生成scanner.yy.c 和grammar.tab.c。我猜你可以手动 $(CC) 那些?
标签: c makefile code-generation gnu-make