これが私のメイクファイルです:
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
およびコマンドは、またはそれぞれが変更されたyacc
場合にのみトリガーする必要があります。sql.l
sql.y