gcc的-march=native选项根据主机的体系结构生成不同的代码。ccache不将机器体系结构存储在其哈希中,这意味着如果您更改机器的体系结构,例如切换到高性能VPS节点,则缓存的对象文件可能不兼容。
如何确保在利用缓存的同时获得正确的对象文件?
ccache
不存储体系结构,但它存储第一次构建对象时使用的编译器标志。因此,您的问题的一个潜在解决方案可能是使用一个瘦包装器脚本,该脚本将-march=native
扩展到实际的标志集(例如,使用类似的东西),然后将它们传递给ccache
。
(当然,我将把实际实现留给读者练习。)
您可以确保在构建场中使用具有相同架构的机器。除此之外,我不知道你怎么能解决那个问题。
还要记住,如果您使用-march=native
,那么任何想要运行二进制文件的人都需要具有相同(或者可能更新但向后兼容)的机器体系结构。这可能是个问题,也可能不是个问题。