我们说我有几个目录,每个目录都包含一个int a=2, b=3;
int *p1 = &(a+b); // Wrong
int &&r1 = a+b; // OK, but the result is no longer an rvalue
int *p2 = &r1; // OK
。现在让我们说这个目录中有一个makefile
目录(也有lib
),并且在其他目录的某些makefile
中有一个引用它。即,有一些项目依赖于另一项。现在,如果我使用makefile
选项运行make
实用程序,它可能会尝试在两个或多个并行线程中生成-j
。
问题很简单:如何防止这种行为?
答案 0 :(得分:1)
我认为最好的解决方案是使用.NOTPARALLEL
:
a:
@echo a
@sleep 1
@echo end a
b:
@echo b
@sleep 1
@echo end b
.NOTPARALLEL:
没有.NOTPARALLEL
:
$ gmake a b -j 2
a
b
end a
end b
使用.NOTPARALLEL
:
$ gmake a b -j 2
a
end a
b
end b
.NOTPARALLEL
如果提到.NOTPARALLEL作为目标,则调用make 即使给出了'-j'选项,也会连续运行。任何 递归调用make命令仍将并行运行配方 (除非它的makefile也包含这个目标)。任何先决条件 这个目标被忽略了。
.NOTPARALLEL 禁用并行模式。
.NO_PARALLEL .NOTPARALLEL的同义词,用于与其他pmake变体兼容。