Yal*_*ang 3 makefile gnu-make race-condition
我有一个简单的示例 makefile 来显示我的问题:
.PHONY: a.out b.out
all: a.out b.out
common:
echo building common
sleep 1
touch common
a.out: common
echo building a.out
b.out: common
echo building b.out
Run Code Online (Sandbox Code Playgroud)
a.out & b.out 取决于 common,因此在进行并行构建时可能会出现竞争条件(common 生成两次)。
我确实 make -j4 并且没有遇到 common 被生成两次。我什至在 common 生成中添加了 sleep 语句,以使事情更具确定性。
那么可以说 GNU make 在构建公共依赖项时正确同步吗?
是的,GNU make 的并行化支持正确地处理了这个问题(如果没有,它就不会很有用!)一般来说,如果你的 makefile 环境完全正确地声明了你的依赖关系图,那么无论并行作业的数量。
诀窍在于,对于某些类型的复杂环境,很难完全正确地声明依赖图。但是对于像上面这样的简单情况,没有问题。
| 归档时间: |
|
| 查看次数: |
1508 次 |
| 最近记录: |