Question

I have a makefile with this line:

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

now I have several other lines that depend on parser_yacc.h. When I perform make everything runs fine. However when I run make -j4 I always get this warning:

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

As I understand make tries to build both parser_yacc.c and another file that needs parser_yacc.hat the same time; thus spawning twice the commands

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

causing the second to crash... How could I circumvent this problem?

Was it helpful?

Solution

You might rewrite the rule for either of the targets alone (e.g. the .c), and add another rule for completing the other one.

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
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top