我有一个 Makefile,我想并行使用它来编译一组单独的程序。它看起来像这样:
compileall: program1 program2 program3
@echo "Compilation completed"
program1 program2 program3:
@echo "Compiling $@"
$(MAKE) -C $@
我称之为使用gmake compileall -j3
一切正常。它作为我们测试脚本的一部分每天运行。
现在,我添加了一个新目标program1a
需要成为同一 make 目标的一部分,并且不能与program1
目标。它发生在之前还是之后并不重要,只是不同时发生而已。
我知道我可以做类似的事情:
compileall:
+$(MAKE) program1 program2 program3
+$(MAKE) program1a
@echo "Compilation completed"
program1 program2 program3:
@echo "Compiling $@"
$(MAKE) -C $@
program1a:
@echo "Compiling $@"
$(MAKE) -C program1 A=true
有一个更好的方法吗?我希望不必等待program2
and program3
为了开始而完成program1a
汇编。
未经测试(如果这不起作用请告诉我),但你可以这样做:
compileall: program1 program2 program3
@echo "Compilation completed"
program1: program1a
@echo "Compiling $@"
$(MAKE) -C $@
program1a program2 program3:
@echo "Compiling $@"
$(MAKE) -C $@
那样program1a
应该在之前构建program1
并且 make 应该能够构建program2
and program3
无论如何并行。
EDIT:更干净一点(谢谢@Beta):
compileall: program1 program2 program3
@echo "Compilation completed"
program1: program1a
program1 program1a program2 program3:
@echo "Compiling $@"
$(MAKE) -C $@
EDIT 2:我想到的避免依赖的唯一解决方案如下。
创建 2 个单独的 makefile,如下所示:
# Makefile1.mk
.NOTPARALLEL: # Force disabling of -j flag
all: program1 program1a
program1 program1a:
@echo "Compiling $@"
$(MAKE) -C $@
# Makefile
all: program1 program1a program2 program3
program1 program1a:
$(MAKE) -f Makefile1.mk
program2 program3:
@echo "Compiling $@"
$(MAKE) -C $@
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)