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