未安装Qt VS工具的情况下以Qt / MsBuild格式编译Qt项目

cbu*_*art 3 c++ msbuild qt visual-studio qt-vs-addin

我在Visual Studio中有许多Qt项目,使用的是Qt VS工具提供的新Qt / MsBuild格式。在安装了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时如何解决此类错误?

cbu*_*art 5

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

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

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

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

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

set QtMsBuild=%LOCALAPPDATA%\QtMsBuild
Run Code Online (Sandbox Code Playgroud)

PS:不要在变量中添加双引号(至少我对它们有问题,因此VS无法找到文件)。