3
我正在使用makefile来构建我的flex/bison项目。我遇到问题,因为它正在添加对yacc
和mv
命令的调用,从而覆盖我的一个文件。添加意外的mv命令
[email protected] ~/calc ±master⚡ » make clean
rm -rf lex.yy.c calc.tab.h calc.tab.c calc
[email protected] ~/calc ±master » make
bison -d calc.y
flex calc.lex
g++ -o calc calc.tab.c lex.yy.c calc.c
[email protected] ~/calc ±master⚡ » make clean
rm -rf lex.yy.c calc.tab.h calc.tab.c calc
[email protected] ~/calc ±master » touch calc.y
[email protected] ~/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到最低限度来重现这一点。使用野牛创建两个文件:calc.tab.c
和calc.tab.h
。我没有.h文件作为目标,因为我不确定正确的方法是什么。对野牛的调用将生成calc.tab。*文件,因此这不是我主要关心的问题。
什么是正确的方式来构建这个生成文件,以避免生成调用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
有道理。我不知道隐含的规则。谢谢。 – user1657033