我能够从Qt生成MSVC项目(.vcxproj),但该项目不包含应用清单文件(Package.appxmanifest)。我尝试使用qmake变量WINRT_MANIFEST并确保CONFIG包含embed_manifest_exe,但是我一定对某些东西有误解。
我的问题分为两部分:
我正在 Windows 10 上使用 Qt Creator 4.7.1 , Qt 5.11.2 MSVC2017 64bit ,并且具有 Visual Studio 2017社区已安装。
基于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。
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_MANIFEST
和CONFIG contains embed_manifest_exe
的组合应该意味着应嵌入默认清单。
我还尝试设置WINRT_MANIFEST
属性(例如WINRT_MANIFEST.publisher
),并尝试创建自己的Manifest.xml并设置WINRT_MANIFEST=Manifest.xml.
,但这没什么区别。
答案 0 :(得分:1)
该解决方案非常简单且“显而易见”,但是正如我在文档中没有提到的那样,我还没有意识到它的存在。
问题在这里:
我正在Windows 10上使用Qt Creator 4.7.1, Qt 5.11.2 MSVC2017 64位,并且已安装Visual Studio 2017社区。 p>
该应用清单由使用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
。