簡體   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