2017-03-08 49 views
0

我想了解在Qt5的相应32位和64位子文件夹中的moc.exe(Qt元对象编译器)之间的区别。Qt moc.exe - 32位和64位版本的区别?

如果我让我的64位目标体系结构的应用程序由32位或64位moc.exe版本构建(并处理),它有什么区别吗?

我在这找不到任何信息。如果任何人有线索或想法有什么不同之处(除了为相应的架构编译并且当然有不同的文件大小),或者如果这有所作为(因为它只生成cpp文件),我会很有兴趣知道。

在此先感谢 萨米尔

回答

1

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

是的。 不支持这种混合和匹配。它可能工作,但它可能会因为没有人测试它来确保它正常工作而中断。 Qt有一个运行在持续集成过程中的广泛的测试套件。像这样的事情未经测试是一个很大的暗示,如果你依赖它,你自己是独立的。如果遇到奇怪的运行时错误,请不要抱怨。不要这样做。

的区别是什么

任何事情,一切。 Qt保证作为与你的合同的一点是,来自先前的二进制兼容Qt版本的moc输出保留了转发二进制兼容性。例如。如果你有来自Qt 5.7的moc输出,并且你构建了你的应用程序的共享二进制文件,然后用二进制兼容5.8替换Qt,旧的moc输出是有效的,Qt 5.8知道如何安全地使用它。就这样。

因为很明显,32位和64位Qt版本是而不是与二进制兼容,所以您不应该指望moc输出也是。如果碰巧是,这是巧合,设计没有保证它。它可以随时中断。

您不应该面临此问题,因为qmake/qbs/cmake会为您使用正确的moc。似乎你可能试图用moc预处理源,以便在构建项目时不需要进一步使用moc。这个策略不会起作用。您需要学习如何利用构建工具使用所需的代码生成器来构建项目。

moc不是Qt提供的唯一构建工具,您最终可能会在基于Qt的项目中使用它。此外,任何重要大小的项目都应该使用许多其他代码生成器,以提高生产力。避免代码生成作为一项政策是适得其反的。如在:它会花费你更多。

+0

谢谢库巴。这是非常有用的,并按我的预期回答了我的问题。 – Samxion