我使用Visual Studio與qt插件,當我建立我的項目時,它生成moc _ *。cpp文件作爲我的項目中的生成規則的結果:Qt Vs addin - .obj文件不生成moc _ *。cpp文件
<Tool
Name="VCCustomBuildTool"
Description="Moc'ing $(InputFileName)..."
CommandLine="$(QTDIR)\bin\moc.exe $(InputPath) -o .\GeneratedFiles\$(ConfigurationName)\moc_$(InputName).cpp (continues..)
AdditionalDependencies="$(QTDIR)\bin\moc.exe;.\myfilewithqobject.h"
Outputs=".\GeneratedFiles\$(ConfigurationName)\moc_myfilewithqobject.cpp"/>
產生moc_myfilewithqobject.cpp後,繼續建設項目,並在鏈接階段它給LINK 2001年的錯誤:因爲它無法找到該文件moc_myfilewithobject.obj
unresolved external symbol "public: virtual struct QMetaObject const * __thiscall myfilewithobject::metaObject(void)const
unresolved external symbol "public: virtual void * __thiscall myfilewithobject::qt_metacast(char const *)
unresolved external symbol "public: virtual int __thiscall myfilewithobject::qt_metacall
。 未生成moc_myfilewithobject.obj,因爲moc_myfilewithobject.cpp未在生成後編譯。 但是,當我將moc_myfilewithobject.cpp包含到我的項目中時,它將被編譯並解決問題。 但是這是手工完成的,它有時會導致一些問題。 有沒有辦法解決這個問題,而不包括moc_ .cpp文件手動投影? 就像編譯moc_ .cpp後生成或自動包括它?
說明: 我添加了一個試用.h文件作爲qt類,以查看在項目文件中添加新qt頭時會發生什麼情況。它補充說,不是我的問題的文件所擁有的線:
<ClCompile Include="GeneratedFiles\Debug\moc_Denemeqt.cpp">
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
</ClCompile>
所以這是一個真正的配置,我認爲,但作爲一個Qt類不具有這樣的配置我的文件之前創建的。但是,當我刪除GeneratedFiles中的Debug文件夾時,它給出了相同的錯誤,因爲當我刪除Debug文件夾時,moc_ .cpp文件也從項目文件中刪除。 所以這裏是一個問題:生成的moc_ .cpp文件不能被刪除,這是真的嗎?
通常情況下,如果你有Qt的VS插件正確安裝和你的項目定義爲一個Qt項目,增加了包含Q_OBJECT聲明的頭文件會自動將相應的moc _ *。cpp添加到項目的「生成的文件」文件夾中。也許你的項目應該轉換成Qt插件項目? – vahancho 2015-02-11 13:30:14
沒有項目是一個Qt插件項目和moc _ *。cpp文件生成到生成文件文件夾中,在生成中沒有問題。生成的問題moc _ * .cpp文件未包含在項目中,因此未編譯,並且由於缺少obj文件而出現這些錯誤。 – 2015-02-11 13:36:21
一般情況下,您需要將文件添加到項目中才能編譯該文件...使用qt將生成的moc文件添加到第一次創建的項目後是正常的。 – g19fanatic 2015-02-11 13:37:06