make multicore(-j)不能正确处理依赖项?

时间:2014-04-25 07:22:31

标签: makefile multicore

我有一行makefile:

parser_yacc.h parser_yacc.c :   parser_yacc.y
    bison -y -d parser_yacc.y && mv y.tab.h parser_yacc.h && \
            mv y.tab.c parser_yacc.c

现在我有几个依赖于parser_yacc.h的其他行。当我执行make时,一切运行正常。但是,当我运行make -j4时,我总是收到此警告:

mv: cannot stat `y.tab.c': No such file or directory

据我所知,make尝试同时构建parser_yacc.c和另一个需要parser_yacc.h的文件;从而产生两次命令

bison -y -d parser_yacc.y && mv y.tab.h parser_yacc.h && \
    mv y.tab.c parser_yacc.c

导致第二次崩溃......我怎么能绕过这个问题?

1 个答案:

答案 0 :(得分:1)

您可以单独为任一目标重写规则(例如.c),并添加另一条规则来完成另一个目标。

parser_yacc.c :   parser_yacc.y
    bison -y -d parser_yacc.y && mv y.tab.c parser_yacc.c

parser_yacc.h : parser_yacc.c
    mv y.tab.h parser_yacc.h