Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Makefile 每次都要重新编译,为什么?_Makefile - Fatal编程技术网

Makefile 每次都要重新编译,为什么?

Makefile 每次都要重新编译,为什么?,makefile,Makefile,这是我的makefile: 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 insertintot

这是我的makefile:

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

所有文件都没有更改,为什么要这样做?只有当分别更改了
sql.l
sql.y
时,才应触发
lex
yacc
命令,否?

您的目标都不是真实的文件。使它们成为您正在生成的实际文件的名称,以便
Make
可以找到它们并检查时间戳

例如:

all: sql_parser

lex.yy.c: sql.l
    lex -i sql.l

y.tab.c: sql.y
    yacc -d -v sql.y

sql_parser: 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
您可以添加
.PHONY:all-test-cleanup
,以指示
make
这些目标不是真正的文件