背景
碰到一个偶现的编译出错问题,如图
报错的信息是
cp: 无法创建普通文件"xxx": 文件已存在
排查原因
看了下 Makefile,这句非常简单,就是 cp ./xxx ../xxx 而已,本身没什么问题。
那再结合上下文出现的打印,一个异常之处就是 Makfeile 被并行重复执行了,猜测是并行导致 cp 操作出错。
只考虑解决问题,那无疑是修改外层 Makefile ,避免此处被并行重复执行,至少这句 cp 不要被并行,就可以解决了。
但为什么 cp 并行执行会出错呢?如果在另外的场景下确实有并行执行cp的可能,有没有办法规避这个错误呢?这就得探究下了。
单独执行 cp,默认的行为就是覆盖已存在的文件,并不会因为 “文件已存在” 这样的原因出错,随便做下实验,touch a b; cp a b就可以确认正常是不会报错的。
那问题还是得结合并行来分析,碰到这种情况,要么是从搜索资料获得提示,要么就是实践出真知,自己设计一个可快速复现的方式,然后使用调试工具来追踪问题发生时的具体情况。
具体到这个问题,我是搜索到相同的stackexchange问题,那就省点工夫不用自己去复现分析了。
这里插下题外话,搜索优先