【发布时间】:2011-05-20 10:03:16
【问题描述】:
我正在尝试并行化旧的 Makefile。
事实上,我需要确保在编译过程开始之前调用某些生成器脚本不是并行的。
生成器总是在编译之前被调用。有什么方法可以在 makefile 中建立一个有点关键的部分?
Makefile 很乱,我不想在这里发布。
【问题讨论】:
标签: c makefile parallel-processing
我正在尝试并行化旧的 Makefile。
事实上,我需要确保在编译过程开始之前调用某些生成器脚本不是并行的。
生成器总是在编译之前被调用。有什么方法可以在 makefile 中建立一个有点关键的部分?
Makefile 很乱,我不想在这里发布。
【问题讨论】:
标签: c makefile parallel-processing
您可以将生成文件的规则放在单独的 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 :
【讨论】:
您可以制定一个运行所有脚本的规则,然后确保所有其他规则都依赖于该规则。
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
【讨论】: