6

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 正确处理这个问题,还是我必须手动输入路径?

4

3 回答 3

7

似乎 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。

于 2015-03-20T21:05:55.397 回答
2

感谢您对这个问题的讨论。我可以报告它仍然存在于 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 文件再次被错误地覆盖。

于 2017-06-12T18:30:56.480 回答
0

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

重新初始化项目花了好几秒钟,即使那样我也不相信 .user 文件在我构建项目之前会更新。

于 2021-07-19T23:51:36.830 回答