我正在尝试并行化旧的Makefile。
实际上我需要确保在编译过程开始之前,某些生成器脚本被称为 not parallel 。
在编译之前总是调用生成器。有没有办法在makefile中建立一个有点关键的部分?
Makefile很乱,我不想在这里发帖。
答案 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