如何使用Qt的应用程序清单生成Visual Studio项目?

时间:2018-10-25 09:11:47

标签: windows qt manifest qmake appxmanifest

我能够从Qt生成MSVC项目(.vcxproj),但该项目不包含应用清单文件(Package.appxmanifest)。我尝试使用qmake变量WINRT_MANIFEST并确保CONFIG包含embed_manifest_exe,但是我一定对某些东西有误解。

我的问题分为两部分:

  1. 如何在Qt项目中定义应用清单?
  2. 该应用清单如何成为Qt Creator / qmake生成的MSVC项目的一部分?

我正在 Windows 10 上使用 Qt Creator 4.7.1 Qt 5.11.2 MSVC2017 64bit ,并且具有 Visual Studio 2017社区已安装。

我已经尝试过的东西

建立MSCV项目

基于Qt for WinRT documentation和Qt社区的帮助,我运行了以下命令(通过QMAKE_POST_LINK,在我的.pro中设置):

windeployqt --release --compiler-runtime --qmldir path-to-my-qml-files
qmake -tp vc path-to-my-.pro -o path-to-build-folder/target-name.vcxproj CONFIG+=release

这些成功创建了一个MSVC项目,并且发行文件夹包含部署所需的所有库和一个vcredist_xxx.exe。

在Windows应用清单上阅读Qt文档

Qt documentation for Windows deployment > Manifest files

  

部署使用Visual Studio编译的应用程序时,还需要执行一些其他步骤。首先,我们需要复制在链接应用程序时创建的清单文件。 ...从Qt 4.1.3开始,以下CONFIG选项可用于嵌入清单:   embed_manifest_dll   embed_manifest_exe   这两个选项均默认启用。

因此,据我了解,如果启用了CONFIG选项embed_manifest_exe(默认情况下),则应在运行qmake时嵌入清单。

Qt documentation for Qmake variables > WINRT_MANIFEST

  

指定要传递给应用程序清单的参数。

列出了这些,其中许多具有默认值。

那么为什么没有生成应用清单?即使我自己未指定任何内容,也可以肯定WINRT_MANIFESTCONFIG contains embed_manifest_exe的组合应该意味着应嵌入默认清单。

我还尝试设置WINRT_MANIFEST属性(例如WINRT_MANIFEST.publisher),并尝试创建自己的Manifest.xml并设置WINRT_MANIFEST=Manifest.xml.,但这没什么区别。

1 个答案:

答案 0 :(得分:1)

该解决方案非常简单且“显而易见”,但是正如我在文档中没有提到的那样,我还没有意识到它的存在。

问题在这里:

  

我正在Windows 10上使用Qt Creator 4.7.1, Qt 5.11.2 MSVC2017 64位,并且已安装Visual Studio 2017社区。

该应用清单由使用WinRT的通用Windows平台(UWP)应用(例如Windows应用商店应用)使用。 Qt有一套不同的构建套件。例如,用于UWP 32位的Qt 5.11.2(MSVC 2017)。这些使用mkspecs开头winrt-,并在维护工具/安装程序中显示为 UWP x86 / 64(MSVC 2017)

使用这些工具包之一时,使用默认CONFIG设置embed_manifest_exe,您将获得带有默认清单的Visual Studio项目。

要覆盖默认值,请在.pro中指定属性,例如WINRT_MANIFEST.publisher,或创建一个单独的清单文件并设置WINRT_MANIFEST=path-to-manifest-file。如果要进行后者,则假设清单文件是与最终Package.appxmanifest格式相同的XML文件,那么您还需要WINRT_MANIFEST.CONFIG += verbatim