1

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.dgrammar.tab.d生成される機会がないためです。

これを回避するための最良の方法は何ですか?


この質問は実際にはGNUmakeと同じではないことに注意してください 。生成されたヘッダーファイルを使用して自動依存関係を生成-includeします。これは、他の多くのものに加えて、ではなく 「効率の低い」方法を使用しているためですsef

4

1 に答える 1

0

私の理解が正しければ、 の前提条件を作成するだけgrammar.tab.oscanner.yy.osolidc他のオブジェクトと同様に、オブジェクト ルールによってそれらの依存関係ファイルが生成されます。

SOLIDC_OBJS=solid_ast.o solid_strbuf.o solid_strlit.o solidc.o grammar.tab.o scanner.yy.o

all: solidc

grammar.tab.c: grammar.y
    $(BISON) -vd grammar.y

scanner.yy.c: scanner.l
    $(FLEX) --header-file=scanner.yy.h -o scanner.yy.c scanner.l

solidc: setup $(SOLIDC_OBJS)
    $(CC) -o $(OUTPUT_DIR)/$@ $(SOLIDC_OBJS)

(これらのルールを少し厳しくすることもできますが、まずそれらを機能させましょう。)

于 2012-06-22T23:00:23.700 に答える