我想并行化一个旧的Makefile。临界区并行make文件
事实上,我需要确保在编译过程开始之前,某些生成器脚本被称为而不是并行。
生成器在编译之前总是被调用。有什么办法可以在makefile中建立一个有点关键的部分吗?
Makefile很麻烦,我不想在这里发布它。
我想并行化一个旧的Makefile。临界区并行make文件
事实上,我需要确保在编译过程开始之前,某些生成器脚本被称为而不是并行。
生成器在编译之前总是被调用。有什么办法可以在makefile中建立一个有点关键的部分吗?
Makefile很麻烦,我不想在这里发布它。
你可以把所生成文件的规则,在一个单独的Makefile,做这样的事情:
generated-sources :
$(MAKE) -f Makefile.Generators
然而,GNU制作,这将是默认平行。你需要压制它,而手册并不完全清楚你将如何做到这一点。也许下面的一些组合会工作,这取决于你想支持哪个做的实现:
传递-j1
标志:
generated-sources :
$(MAKE) -j1 -f Makefile.Generators
禁止MAKEFLAGS
选项:
generated-sources :
$(MAKE) -f Makefile.Generators MAKEFLAGS=
用Makefile.Generators
中的以下行抑制并行执行:
.NOTPARALLEL :
关于.NOTPARALLEL选项的注释:该目标将忽略指定的任何前置请求。包含这个目标的任何生成文件将被强制进行串行构建。因此,您可以将需要在单独的makefile中串行构建的东西添加到.NOTPARALLEL目标中。这与ClearCase构建工具Clearmake不同,它允许您指定一组将被视为与并行构建相互排斥的目标。 – 2011-08-08 18:27:46
您可以运行所有脚本的规则,并确保所有的其他规则依赖于该规则。
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
哪个版本的make? – 2011-05-20 10:05:36