2016-06-08 203 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路径。我不认为更新版本的加载项或扩展使用了。