2016-06-08 32 views
1

我無法讓我的程序在x86模式下編譯,但x64可以正常工作。它給了我這個錯誤:修復moc.exe不被識別爲內部或外部命令

1> '"E:\Code\CommonEx\QT\4.8.2-vs10\bin\moc.exe"' is not recognized as an internal or external command, operable program or batch file. 

但是,我甚至沒有一個E驅動器,我不再使用Qt 4.8.2!

所以我的問題是:爲什麼編譯器試圖得到被存儲在此路徑使用此路徑和在地球上?


這是關於我的設置的更多背景信息。我正在使用VS 2015 Professional與Qt5Package擴展版本1.3.9。

在我.vcxproj的底部,這個部分可以發現:

<ProjectExtensions> 
<VisualStudio> 
    <UserProperties MocDir=".\GeneratedFiles\$(ConfigurationName)" UicDir=".\GeneratedFiles" QtVersion="5.6.0" Qt5Version_x0020_Win32="5.6.0-vs2015-x86" Qt5Version_x0020_x64="5.6.0-vs2015-x64" /> 
</VisualStudio> 
</ProjectExtensions> 

(這看起來非常正常的我)

我QT5設置頁面的樣子:

qt5 settings

我100%確定路徑是正確的,這對我來說也很正常。

我的項目的Qt的設置是這樣的:

project qt settings

(同樣,這看起來相當正常的我)

這裏是我的環境變量表(注意,不是指定QTDIR):

environment vars

(因爲我使用Qt的擴展,我的理解爲t帽子也沒有必要在這種情況下設置一個環境變量。)

OK,到目前爲止,一切順利。現在,這是踢球者。我刪除了我的.user文件,然後以x86和x64模式構建。這是已生成的用戶文件:

<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 
    <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> 
    <LocalDebuggerEnvironment>PATH=$(QTDIR)\bin%3b$(PATH) </LocalDebuggerEnvironment> 
    </PropertyGroup> 
    <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> 
    <QTDIR>C:\repos\CommonEx\QT\5.6.0-vs2015-x64</QTDIR> 
    <LocalDebuggerEnvironment>PATH=$(QTDIR)\bin%3b$(PATH) </LocalDebuggerEnvironment> 
    </PropertyGroup> 
    <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> 
    <QTDIR>C:\repos\CommonEx\QT\5.6.0-vs2015-x64</QTDIR> 
    <LocalDebuggerEnvironment>PATH=$(QTDIR)\bin%3b$(PATH) </LocalDebuggerEnvironment> 
    </PropertyGroup> 
    <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> 
    <LocalDebuggerEnvironment>PATH=$(QTDIR)\bin%3b$(PATH) </LocalDebuggerEnvironment> 
    </PropertyGroup> 
</Project> 

我可以清楚地看到,調試下QTDIR標籤| Win32和發佈| Win32的部分是沒有定義!

我已經考慮過使用屬性表並設置一個QTDIR變量,但我不知道這是否會與Qt Extension設置的相沖突,我不想讓它被調整爲兩個不同的地方。

爲什麼QTDIR沒有得到補充,爲32對的那些。用戶文件,但它存在的64位的嗎?爲什麼如果QTDIR沒有在用戶文件中定義,它默認使用了很久以前我用過的一些路徑。 路徑存儲在哪裏?

我會獎勵積分的人誰回答第一個(爲什麼沒有產生那些86),因爲那一個是最重要的。另外兩個是錦上添花:-)

回答

2

所以我寫了這件事了蛋糕,因爲我校對它,答案我恍然大悟。雖然情況可能不是很常見,但問題和答案可能對其他人有用,所以沒有意義把它扔掉。

我知道,發生在舊版本的Visual Studio,其中一個錯誤:

<QTDIR>C:\repos\CommonEx\QT\5.6.0-vs2015-x64</QTDIR> 

前必須< LocalDebuggerEnvironment中。用戶文件中定義>。這不是那種情況 - 因爲QTDIR根本沒有被定義!

當時的情況是,在Visual Studio中,我已經改名爲解決方案平臺:

rename solution platform

嗯......那莊嚴混淆了Qt擴展爲Visual Studio!

爲了解決這個問題,我不得不從Visual Studio項目中完全刪除Qt,從.vcxproj文件中刪除< ProjectExtensions>標記及其中的所有內容。然後,我不得不通過右鍵單擊項目並選擇「轉換爲Qt插件項目」將其重新轉換爲Qt項目。然後,我將qt項目設置設置爲使用5.6.0版本。一旦我做到了......建立......並取得成功! .user文件現在爲x86模式提供了QTDIR部分,並且所有內容都按照它應該的那樣構建。

奇怪的是...我有三臺不同的電腦用於解決這個問題。我必須執行上述所有程序。顯然,Qt擴展以某種方式存儲了與平臺名稱相關的一些內部設置,這些設置不屬於該項目的一部分。只需要從項目中刪除Qt並再次添加它的過程就是需要的。該項目本身確實被修改,但修改很小,不影響任何內容。真正的修復發生在某些內部設置。

至於那些神祕的設置存儲在哪裏......我想我找到了QTDIR之一 - 舊的Qt vs加載項用於創建一個名爲Qt4VSPropertySheet.props的文件,其中包含了真正舊的Qt路徑。我不認爲更新版本的加載項或擴展使用了。

相關問題