Makefile Make添加意外的mv命令

Makefile Make添加意外的mv命令,makefile,bison,flex-lexer,Makefile,Bison,Flex Lexer,我正在使用makefile来构建我的flex/bison项目。我遇到问题,因为它正在添加对yacc的调用和mv命令,从而覆盖了我的一个文件 user@dk ~/calc ±master⚡ » make clean rm -rf lex.yy.c calc.tab.h calc.tab.c calc user@dk ~/calc ±master » make biso

我正在使用makefile来构建我的flex/bison项目。我遇到问题,因为它正在添加对
yacc
的调用和
mv
命令,从而覆盖了我的一个文件

user@dk ~/calc ±master⚡ » make clean                                                                  
rm -rf lex.yy.c calc.tab.h calc.tab.c calc
user@dk ~/calc ±master » make
bison -d calc.y
flex calc.lex
g++ -o calc calc.tab.c lex.yy.c calc.c
user@dk ~/calc ±master⚡ » make clean
rm -rf lex.yy.c calc.tab.h calc.tab.c calc
user@dk ~/calc ±master » touch calc.y
user@dk ~/calc ±master » make
bison -d calc.y
flex calc.lex
yacc  calc.y
mv -f y.tab.c calc.c
g++ -o calc calc.tab.c lex.yy.c calc.c
... Failure ...
我将makefile简化到最低限度,以重现这一点。使用bison创建两个文件:
calc.tab.c
calc.tab.h
。我没有将.h文件作为目标,因为我不确定正确的方法是什么。对bison的调用将生成两个calc.tab.*文件,因此这不是我主要关心的问题

构造这个makefile以避免生成对yacc和mv的调用的正确方法是什么

calc: calc.tab.c lex.yy.c calc.c
    g++ -o calc calc.tab.c lex.yy.c calc.c

calc.tab.c: calc.y
    bison -d calc.y

lex.yy.c: calc.lex calc.tab.h
    flex calc.lex

clean:
    rm -rf lex.yy.c calc.tab.h calc.tab.c calc

mv
来自
make
的内置规则,其中包含:

%.c : %.y
    $(YACC.y) $<
    mv -f y.tab.c $@
%.c:%.y
$(YACC.y)$<
mv-f y.tab.c$@
看起来
make
正在尝试从
calc.y
创建
calc.c
。对此的一些解决方案是自己重新定义该规则,或者将
calc.y
重命名为不会触发
calc.c
的规则,或者禁用
make
的内置规则


您可以使用
make-p

列出所有内置规则。我不知道隐含的规则。非常感谢。