Parallel processing 和野牛一起做j

Parallel processing 和野牛一起做j,parallel-processing,makefile,bison,Parallel Processing,Makefile,Bison,我遇到了一个奇怪的并行构建问题。我的makefile看起来像这样(不是实际的makefile,只是为了说明这一点,所以不要讨厌): 因为parser.c和parser.h文件都依赖于parser.y,bison最终会被调用两次,一次代表lexer.c(包括parser.h,因此依赖于它),一次代表app(依赖于parser.o,依赖于parser.c) 当我使用-d查看调试输出时,我看到bison在两个不同的线程中被调用了两次,调用的距离相对较近。我担心,当所有的星星都排列得恰到好处时,我可能会

我遇到了一个奇怪的并行构建问题。我的makefile看起来像这样(不是实际的makefile,只是为了说明这一点,所以不要讨厌):

因为parser.c和parser.h文件都依赖于parser.y,bison最终会被调用两次,一次代表lexer.c(包括parser.h,因此依赖于它),一次代表app(依赖于parser.o,依赖于parser.c)

当我使用-d查看调试输出时,我看到bison在两个不同的线程中被调用了两次,调用的距离相对较近。我担心,当所有的星星都排列得恰到好处时,我可能会有一个种族状况和腐化的野牛输出。我尝试了一些关于依赖关系的事情,试图强迫它们是连续的,但我只是开始变得越来越陌生

因此,百万美元的问题是:当bison这样的程序实际输出两个文件,满足两个依赖项时,因此当使用-j构建时,可能会从两个不同的非同步线程调用,有没有更明智的方法


谢谢。

您应该使用模式规则;在模式规则中,多个目标意味着一次调用配方会生成两个目标:

%.c %.h : %.y
    ...

就这样。工作起来很有魅力。非常感谢。
%.c %.h : %.y
    ...