Qt moc.exe - 32 位和 64 位版本之间的区别?

Qt moc.exe - difference between 32 and 64-Bit version?

我试图找出 Qt5 的相应 32 位和 64 位子文件夹中的 moc.exe(Qt 元对象编译器)之间的区别。

如果我让我的 64 位目标架构的应用程序由 32 位或 64 位 moc.exe 版本构建(和处理),会有什么不同吗?

我找不到这方面的任何信息。如果有人知道或知道区别是什么(除了针对相应的体系结构进行编译并且当然具有不同的文件大小)或者如果这完全不同(因为它只生成 cpp 文件)我会非常有兴趣知道。

提前致谢 萨米尔

Does it make any difference if I let my application with 64-Bit target architecture be built (and processed) by the 32-Bit or 64-Bit moc.exe version?

是的。 不支持这种混合和匹配。它可能会工作,但它可能会失败,因为没有人测试它以确保它工作。 Qt 有一个广泛的测试套件,运行 处于持续集成过程中。像这样未经测试的东西是一个很大的暗示,如果你依赖它,你就只能靠自己了。如果您 运行 遇到奇怪的 运行 时间错误,请不要抱怨。别这样。

what the difference is

任何东西。作为与您的合同,Qt 保证的所有内容是来自先前二进制兼容 Qt 版本 的 moc 输出 保留向前二进制兼容性。例如。如果您有 Qt 5.7 的 moc 输出,并且您构建了应用程序的共享二进制文件,然后将 Qt 替换为二进制兼容的 5.8,旧的 moc 输出是有效的并且 Qt 5.8 知道如何安全地使用它。就这些了。

显然,32 位和 64 位 Qt 版本二进制兼容,因此您不应期望 moc 输出也是。如果碰巧是这样,那只是巧合,设计中没有任何东西可以保证。随时都可能坏掉。

您不应该遇到这个问题,因为 qmake/qbs/cmake 将为您使用正确的 moc。似乎您正在尝试使用 moc 预处理源代码,以便在构建项目时不再需要进一步使用 moc。这个策略是行不通的。您需要了解如何利用构建工具来使用所需的代码生成器来构建您的项目。

moc 并不是您最终可能会在基于 Qt 的项目中使用的 Qt 提供的唯一构建工具。此外,任何规模的项目都应该使用许多其他代码生成器来提高您的工作效率。避免代码生成作为一种策略会适得其反。如:它会花费你更多。