并行make文件中的关键部分

时间:2011-05-20 10:03:17

标签: c makefile parallel-processing

我正在尝试并行化旧的Makefile。

实际上我需要确保在编译过程开始之前,某些生成器脚本被称为 not parallel

在编译之前总是调用生成器。有没有办法在makefile中建立一个有点关键的部分?

Makefile很乱,我不想在这里发帖。

2 个答案:

答案 0 :(得分:3)

您可以将生成的文件的规则放在单独的Makefile中,并执行以下操作:

generated-sources :
        $(MAKE) -f Makefile.Generators

然而,使用GNU Make,默认情况下这将是并行的。你需要压制它,手册并不清楚你将如何做到这一点。也许下面的某些组合可行,具体取决于您希望支持的make实现:

  • 传递-j1标志:

    generated-sources :
            $(MAKE) -j1 -f Makefile.Generators
    
  • 取消MAKEFLAGS选项:

    generated-sources :
            $(MAKE) -f Makefile.Generators MAKEFLAGS=
    
  • 使用Makefile.Generators中的以下行禁止并行执行:

    .NOTPARALLEL :
    

答案 1 :(得分:3)

您可以制定运行所有脚本的规则,然后确保所有其他规则都依赖于该规则。

all: ${SOURCES} scripts

scripts: last_script


first_script:
    ./script1.sh

second_script: first_script
    ./script2.sh

last_script: second_script
    ./script3.sh

source1.o: source1.c scripts
    gcc source1.c -c -o source1.o