2017-03-08 275 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