使用Qt Visual Studio集成,添加一個新的Qt類會添加兩個單獨的moc.exe生成的文件 - 一個用於調試,另一個用於發佈(另一個用於當前存在的其他配置)。然而,這兩個最終生成的文件似乎是相同的。Qt:調試和發佈中moc輸出的區別?
另一方面,當添加UI類時,uic.exe生成的文件沒有這種分隔,並且對於所有配置都是相同的文件。
有沒有人有一個想法,爲什麼每個配置都需要一個單獨的moc文件?兩者之間有什麼區別?
使用Qt Visual Studio集成,添加一個新的Qt類會添加兩個單獨的moc.exe生成的文件 - 一個用於調試,另一個用於發佈(另一個用於當前存在的其他配置)。然而,這兩個最終生成的文件似乎是相同的。Qt:調試和發佈中moc輸出的區別?
另一方面,當添加UI類時,uic.exe生成的文件沒有這種分隔,並且對於所有配置都是相同的文件。
有沒有人有一個想法,爲什麼每個配置都需要一個單獨的moc文件?兩者之間有什麼區別?
我的猜測是需要單獨的調試和發佈版本,因爲moc輸出是從用戶定義的源代碼生成的。因此,如果預處理的類源在調試版和發行版之間不同(例如,只存在於調試版中的信號),則調試版和發佈版的moc輸出可能會有所不同。
這不適用於uic生成的文件,因爲它們是從.ui XML生成的,因爲這些文件在調試版和發行版配置之間無法改變。
Moc解析預處理器指令的來源。所以如果你有這樣一個頭文件:
class Test : public QObject
{
Q_OBJECT
public:
Test();
public slots:
#ifndef DEBUG
void Foo();
#endif
};
然後,槽Foo將只存在於發佈版本而不是調試版本。 Moc將生成不同的moc.cpp文件,具體取決於是否設置了DEBUG(在本例中)符號。