【问题标题】:Compiling Qt projects in Qt/MsBuild format without Qt VS Tools installed在未安装 Qt VS Tools 的情况下以 Qt/MsBuild 格式编译 Qt 项目
【发布时间】:2018-12-07 11:49:23
【问题描述】:

我在 Visual Studio 中有许多 Qt 项目,使用 Qt VS 工具提供的 new Qt/MsBuild format。在我安装了 Qt VS 工具的开发环境中编译时,一切正常(从 IDE 和命令行编译)。

我们有一台专门用于夜间构建的计算机,其中只有编译器和 msbuild 可用(未安装 IDE 或 Qt VS 工具)。

在这样的计算机上编译项目时,我们得到一个错误:

QtMsBuild:找不到 qt.targets、qt.props;项目可能无法正确构建。

后跟几行如

e:********\Preferences.h(4): 致命错误 C1083: 无法打开包含文件: 'ui_Preferences.h': 没有这样的文件或目录

(项目包含Preferences.ui)。

在未安装 Qt VS Tools 的情况下如何解决此类错误?

【问题讨论】:

    标签: c++ visual-studio qt msbuild qt-vs-addin


    【解决方案1】:

    工具的创建者提供的一个解决方案是将%LOCALAPPDATA%\QtMsBuild 复制到每个项目目录中。但我们谈论的是数百个项目。手动执行,以及更多,将它们作为项目本身的一部分推送听起来不是很优雅。

    一种选择是添加一个预构建步骤,将其从一个公共位置复制到每个项目中(并在每个 .gitignore 文件中添加一个**/QtMsBuild 行)。同样,看起来工作量太大了。

    在查看 Qt 项目的 .vcxproj 文件时,您会发现这个片段(创建者提供解决方案的原因):

    <PropertyGroup Condition="'$(QtMsBuild)'=='' or !Exists('$(QtMsBuild)\qt.targets')">
      <QtMsBuild>$(MSBuildProjectDirectory)\QtMsBuild</QtMsBuild>
    </PropertyGroup>
    

    因此,最简单的解决方案(无法安装工具)是将%LOCALAPPDATA\QtMsBuild 目录(从安装了工具的系统中)复制到夜间计算机(在任何常见的地方,但我决定保留工具使用的位置),然后设置环境变量:

    set QtMsBuild=%LOCALAPPDATA%\QtMsBuild
    

    PS:不要给变量加双引号(至少我对它们有问题,所以VS找不到文件)。

    2020 年 9 月 14 日更新

    我不确定它从哪个版本开始,但使用(至少)v2.5.2 Qt VS Tools 创建的 Qt 项目无法编译,表明尚未设置 Qt 版本。要解决这个问题,您可以

    1. 从位于HKCU\SOFTWARE\Digia\Versions的安装了工具的计算机上复制注册表项。
    2. 如果您将依赖单个 Qt 版本(但可能会为所有项目全局更新),您可以跳过注册表并将所有项目的 Qt 版本设置为 $(DefaultQtVersion)(与过去项目格式中使用的相同) ) 并定义一个指向版本目录的环境变量:例如set DefaultQtVersion=c:\Qt\Qt_5_15_0\Win32

    【讨论】:

    • 感谢您在这里分享您的解决方案,您可以接受它作为答案。这可能对阅读此主题的其他社区成员有所帮助。
    【解决方案2】:

    我在设置$Env:QtToolsPath="$Env:QT_PATH\bin" 时遇到了问题,解决了这个问题。 (它没有为某些检查找到 qmake)。我认为使用 QtMsBuild v3.3 时需要这样做

    不确定此信息是否 100% 正确,但可能对某人有所帮助。

    为了让我使用 QtMsBuild 将 MsBuild 与 Qt 一起使用(不安装 Visual Studio 和/或 VS 插件),我需要设置:

    示例(PowerShell):

    - $Env:PATH="$Env:MSBUILD_PATH;$Env:PATH"
    - $Env:QT_PATH="D:\BuildTools\Qt\5.15.1\msvc2019_64"
    - $Env:QtMsBuild="D:\BuildTools\Qt\QtMsBuild303" #303 Against visual studio project version
    - $Env:QtToolsPath="$Env:QT_PATH\bin" #Support QtMSBuild , At desktop is done by the plug in
    - $Env:PATH="$Env:QtMsBuild;$Env:PATH"
    - $Env:PATH="$Env:QT_PATH\bin;$Env:PATH"
    

    【讨论】:

    • @cbuchart Tks 进行清理
    【解决方案3】:

    我点击了它并让它工作了。

    我听从了@cbuchart 的建议;但需要做更多/不同的事情。

    这就是我所做的。我将%LOCALAPPDATA%\QtMsBuild 复制到我的仓库中。然后我用文本编辑器编辑了我的.vcxproj。我调整了看起来像这样的线:

    <QtMsBuild Condition="'$(QtMsBuild)'=='' OR !Exists('$(QtMsBuild)\qt.targets')">$(MSBuildProjectDirectory)\QtMsBuild</QtMsBuild>
    

    成为:

    <QtMsBuild Condition="'$(QtMsBuild)'=='' OR !Exists('$(QtMsBuild)\qt.targets')">$(MSBuildProjectDirectory)\..\QtMsBuild</QtMsBuild>
    

    根据您的项目所在位置与复制的QtMsBuild 目录的相对位置,您可能需要对此进行调整。在我的情况下,.vcxproj 位于与包含我复制的 QtMsBuild 目录的目录相比的一级目录中。

    接下来在QtMsBuild/Qt.props 文件中我添加了以下内容:

    <PropertyGroup>
       <DefaultQtVersion>$(MSBuildThisFileDirectory)\..\Qt5.15.0\msvc2019_64</DefaultQtVersion>
       <QtToolsPath>$(DefaultQtVersion)\bin</QtToolsPath>
    </PropertyGroup>
    

    这是在该文件中打开 Project 标记之后添加的。

    正如@cbuchart 提到的那样,某些事情可能已经改变。我没有做注册表的想法;但添加了这些行。如果需要,我认为可以将它们添加到在 Qt.props 之前导入的不同文件中。

    现在这个“Qt5.15.0\msvc2019_64”是什么;您需要安装 Qt 的计算机中的工具、包括库才能构建(如果您的构建需要运行可执行文件(即测试),还需要 DLL)。这可能是很多文件,因此如果您知道自己在做什么,可以减少一些文件。将这些放入它自己的子模块或其他东西中可能是有意义的。

    之后它应该uic/moc 文件并最终构建(并运行)。

    【讨论】:

      【解决方案4】:

      我也有。也许你需要更新你的视觉工作室,然后重新启动你的电脑...... 问题解决了。原因:安装 'qt vs tools' 最新版本但 Visual Studio 不支持。

      【讨论】:

      • 我认为您正在回答不同的问题。问题询问如何编译 Qt 项目没有安装 Qt VS 工具。
      猜你喜欢
      • 1970-01-01
      • 2013-05-11
      • 2016-06-07
      • 2023-03-11
      • 2021-02-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多