这是我的生成文件:
all: lex yacc compile
lex: sql.l
lex -i sql.l
yacc: sql.y
yacc -d -v sql.y
compile: y.tab.c lex.yy.c
$(CC) -o sql_parser y.tab.c lex.yy.c -ly -ll
test: all
@./parsesql.sh selecttest.sql
@./parsesql.sh insertintotest.sql
@./parsesql.sh deletefromtest.sql
@./parsesql.sh createtest.sql
cleanup:
rm test.tab.cacc
rm y.output
运行make
将始终触发完全重新编译,即使没有任何改变:
parsesql> make
lex -i sql.l
yacc -d -v sql.y
cc -o sql_parser y.tab.c lex.yy.c -ly -ll
parsesql> make
lex -i sql.l
yacc -d -v sql.y
cc -o sql_parser y.tab.c lex.yy.c -ly -ll
parsesql> make
lex -i sql.l
yacc -d -v sql.y
cc -o sql_parser y.tab.c lex.yy.c -ly -ll
所有文件都没有更改,那么为什么要这样做呢?lex
andyacc
命令应该仅在或分别发生更改时触发,sql.l
不是sql.y
吗?