obj文件损坏时,应该重新生成
你在什么场景下需要该功能?
编译时遇到VS的LNK1136报错,就是obj文件损坏或无效,如果手动删除这个obj文件,则会提示LNK1104,无法打开obj文件,而并不会自动生成。好像只能删除缓存,如果是远程缓存,就更麻烦。
描述可能的解决方案
当遇到LNK1136或者LNK1104报错时,应该尝试重新生成这个obj文件。
描述你认为的候选方案
No response
其他信息
No response
到了 link 阶段再去重新生成obj改动太大,不现实,暂时不会考虑。。
先得找出损坏原因,尽可能避免出现损坏。而不是直接通过 workaround 规避问题。可以先尝试复现看看,到底哪些 case 下容易出现损坏。
按理本地缓存,除非 copy 过程中中断了,其他情况损坏的几率不大。远程收发有做过一些处理,只有完整收完才会实际生效。
目前没对 obj 做完整性校验,也是为了性能考虑,毕竟每次编译对每个 obj 都去算一遍 hash 太耗时。
原因不好找,以前普通VS工程也会出现,删除obj文件就会重新编译,用xmake现在只能删除缓存全部重新编译。fastbuild删除单个obj文件,会重新编译这个文件,xmake现在是提示找不到obj文件。 另外不知道分布式编译有没有处理远程机器内存不足的问题?以前用fastbuild经常出现远程机器内存不足导致编译失败,后来改了,会重新本地编译出错的文件。
原因不好找,以前普通VS工程也会出现,删除obj文件就会重新编译,用xmake现在只能删除缓存全部重新编译。fastbuild删除单个obj文件,会重新编译这个文件,xmake现在是提示找不到obj文件。
删除那个我回头会改进下
另外不知道分布式编译有没有处理远程机器内存不足的问题?以前用fastbuild经常出现远程机器内存不足导致编译失败,后来改了,会重新本地编译出错的文件。
目前没判断内存啥的,后期会考虑针对内存和cpu负载 来优化调度算法,但目前不管什么原因导致的远程服务编译失败,都是会自动 fallback 到本地编译。
原因不好找,以前普通VS工程也会出现,删除obj文件就会重新编译,用xmake现在只能删除缓存全部重新编译。fastbuild删除单个obj文件,会重新编译这个文件,xmake现在是提示找不到obj文件。
这个问题 我 dev 修了