Makefile Make添加意外的mv命令
我正在使用makefile来构建我的flex/bison项目。我遇到问题,因为它正在添加对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
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
列出所有内置规则。我不知道隐含的规则。非常感谢。