繁体   English   中英

Visual Studio 2013 和 Qt5:QTDIR 设置为时已晚

[英]Visual Studio 2013 and Qt5: QTDIR set too late

在 MSVC2013 中,一切都适用于 Qt,除了一件事:在设置本地调试环境时,未找到 DLL,因为 $(QTDIR) 未定义。

我的调试环境设置:

PATH=$(QTDIR)\bin%3b$(PATH)

我的 .user 文件:

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
    <LocalDebuggerEnvironment>PATH=$(QTDIR)\bin%3b$(PATH)</LocalDebuggerEnvironment>
    <QTDIR>C:\Qt\Qt5.4.1\5.4\msvc2013</QTDIR>
    <DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
    <LocalDebuggerEnvironment>PATH="$(QTDIR)\bin%3b$(PATH)</LocalDebuggerEnvironment>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
    <LocalDebuggerEnvironment>PATH=$(QTDIR)\bin%3b"$(QTDIR)\bin%3b$(PATH)</LocalDebuggerEnvironment>
    <QTDIR>C:\Qt\Qt5.4.1\5.4\msvc2013</QTDIR>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
    <LocalDebuggerEnvironment>PATH="$(QTDIR)\bin%3b$(PATH)</LocalDebuggerEnvironment>
  </PropertyGroup>
</Project>

我不知道为什么,但是 $(QTDIR) 变量对 LocalDebuggerEnvironment 不可用。

它适用于以下调试环境设置:

PATH=C:\Qt\Qt5.4.1\5.4\msvc2013\bin%3b$(PATH)

是否可以让 Visual Studio 正确处理这个问题,还是我必须手动输入路径?

似乎 Visual Studio 从上到下解析行,所以用你的代码......

<LocalDebuggerEnvironment>PATH=$(QTDIR)\bin%3b$(PATH)</LocalDebuggerEnvironment>
<QTDIR>C:\Qt\Qt5.4.1\5.4\msvc2013</QTDIR>

...变量 $(QTDIR) 在第二行定义,不能在第一行使用。

只需切换顺序,以便在使用之前定义变量:

<QTDIR>C:\Qt\Qt5.4.1\5.4\msvc2013</QTDIR>
<LocalDebuggerEnvironment>PATH=$(QTDIR)\bin%3b$(PATH)</LocalDebuggerEnvironment>

注意:Visual Studio 仅在启动时读取 .user 文件,因此您需要在编辑该文件后(重新)启动 Visual Studio。

感谢您对这个问题的讨论。 我可以报告它仍然存在于 Qt 5.8 / QT Extension for Windows Version 2.1.1 / Visual Studio 2015 中。症状是输入“$(QTDIR)\\bin”(Qt DLL 的位置)作为 PATH 文件夹VStudio 项目属性 Debugger...Environment 中的规范似乎有效,但实际上无效。

“似乎可以工作”我的意思是,如果您单击检查调试器环境属性的选项,并且环境属性的原始形式看起来像“PATH=$(QTDIR)\\bin;...;$(PATH) “ VStudio 编辑对话框将帮助您通知 PATH 字符串的计算结果为(例如)“PATH=D:\\TechApps\\Qt\\5.8\\msvc2015_64b\\bin;...”——就像 QTDIR 宏是一样的真正存在并具有正确的价值。 这是残酷的欺骗!

因为,“真的不起作用”是指从 VStudio 中启动 Qt 相关应用程序时实际准备使用的 PATH 没有看到这个宏。 你漂亮的 PATH 字符串被简化为“\\bin;...”。 您可以通过将 Qt DLL 从 $(QTDIR)\\bin 临时复制到应用程序可执行文件的文件夹中来确认这一点。 您的应用程序将正确启动。 如果你在你的程序中检查你的 PATH(例如在 c++ 中使用 getenv("PATH"),你会看到你的程序的 PATH 字符串缺少 QTDIR。(也就是说,如果 QTDIR 是空字符串,它会是什么) .)

FWIW,此问题的另一个症状是,如果您检查 VStudio 宏列表,$(QTDIR)不在列表中。

上述解决方案(重新排列 ...vcxproj.user 中的元素)似乎解决了该问题。 当您在该文件中更早地移动 QTDIR 的定义时,应用程序实际可用的 PATH 字符串是正确的,并且 $(QTDIR) 出现在 Visual Studio 已知的宏列表中。

但是,我不知道在 VStudio 中更改“Qt VS 工具”选项或“Qt 项目设置”是否会导致 .user 文件再次被错误地覆盖。

更改(或重新选择)解决方案中的 Qt 版本(更改解决方案 Qt 版本)为我解决了这个问题。

重新初始化项目花了很多时间,即使如此,我也不相信 .user 文件会在我构建项目之前更新。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM