修复moc.exe不被识别为内部或外部命令

时间:2016-06-08 19:34:39

标签: visual-studio qt rename

我无法让我的程序在x86模式下编译,但x64工作正常。它给了我这个错误:

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%确定路径是正确的,这对我来说也很正常。

我的Project的Qt设置如下:

project qt settings

(同样,这看起来很正常)

这是我的环境变量表(注意,未指定QTDIR):

environment vars

(因为我使用Qt扩展,我的理解是在这种情况下设置环境变量是不必要的。)

好的,到目前为止一切顺利。现在这里是踢球者。我删除了我的.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>

我可以清楚地看到Debug [Win32和Release | Win32]部分下的QTDIR标签没有定义!

我考虑使用属性表并设置QTDIR变量,但我不知道这是否会与Qt Extension设置的那个冲突,我讨厌让它被调整在两个不同的地方。

为什么QTDIR没有被添加到32位的.user文件中,但它存在于64位的?为什么如果QTDIR没有在用户文件中定义,它默认为我很久以前使用过的路径。 路径存储在哪里?

我会给那些回答第一个问题的人奖励积分(为什么没有生成x86),因为那个是最重要的。另外两个是锦上添花: - )

1 个答案:

答案 0 :(得分:2)

所以我把这整篇文章都写完了,因为我正在校对它,答案就在我身上。虽然这种情况可能并不常见,但问题和答案可能对其他人有用,所以没有把它扔掉的意义。

我知道在旧版Visual Studio中发生了一个错误:

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

必须在&lt;之前定义LocalDebuggerEnvironment&gt;在.user文件中。这不是那种情况 - 因为QTDIR根本没有定义!

在Visual Studio中,我重命名了解决方案平台:

rename solution platform

嗯......这真是让Visual Studio的Qt扩展感到困惑!

为了解决这个问题,我必须通过删除&lt;来自Visual Studio项目中完全删除Qt。 ProjectExtensions&gt;标记及.vcxproj文件中的所有内容。然后我必须通过右键单击项目并选择&#34;转换为Qt加载项目&#34;将其重新转换为Qt项目。然后我将qt项目设置设置为使用5.6.0版本。一旦我做到了......建立......并取得成功! .user文件现在有一个用于x86模式的QTDIR部分,所有内容都按照它应该构建。

奇怪的是......我使用三台不同的计算机来处理该解决方案。我必须对所有这些程序执行上述程序。显然,Qt扩展以某种方式存储了一些与平台名称相关的不属于项目的内部设置。只需要从项目中删除Qt并再次添加它的过程就是所需要的。项目本身确实被修改,但修改很小,不会影响任何事情。真正的修复发生在某些内部设置中。

关于存储这些神秘设置的地方......我想我找到了QTDIR - 用于创建名为Qt4VSPropertySheet.props的旧qt vs加载项,其中包含非常古老的Qt路径。我不认为新版本的加载项或扩展程序会再使用它了。