我有一个自定义的Manifest文件,并希望将其嵌入可执行文件中。我使用MS Visual Studio 2010编译器和Qt 5.2.1。
我使用Qt Creator作为IDE,使用CMake进行发布版本。 我应该在.pro和CMake文件中设置哪些选项?
我试图通过' / MANIFEST ...'比如链接器的标志,但它们似乎不受VS 2010链接器支持。
答案 0 :(得分:3)
最终我找到了解决方案。
首先,需要将以下行添加到.pro文件中:
svg {
padding-left: 1px;
padding-right: 1px;
padding-top: 1px;
padding-bottom: 1px;
}
这将禁用默认清单文件的嵌入。之后,有必要添加一个Windows资源文件:
CONFIG -= embed_manifest_exe
通常包含.rc文件以将版本信息嵌入到.exe中,但是一旦清单也是可执行资源的一部分,我们就可以在其中引用自定义清单文件,只需将以下行添加到app_resources.rc中:
RC_FILE = app_resources.rc
其中1是资源ID,24是资源类型 - RT_MANIFEST,myapp.exe.manifest是包含我们自定义清单的文件。 如果您不需要版本信息,那么app_resources.rc可能只包含这一行。
就是这样。
对于CMake,步骤如下:
1)在目标
的来源列表中包含app_resources.rc2)添加以下行以禁用默认清单文件的嵌入:
1 24 myapp.exe.manifest
对于某些未知的原因/ MANIFEST:NO在.pro文件中不起作用。链接器因未知选项错误而失败。但它适用于CMake。链接器与VS 2010相同......
答案 1 :(得分:1)
我无法帮助您使用qmake方面,但对于CMake,您应该只能将清单文件列为目标源之一。这需要CMake 3.4或更高版本(参见release notes)。
答案 2 :(得分:0)
使用基于qmake script
manifest injection
下面的*.rc
,您不需要在任何MakeFile
文件中包含清单(适用于基于qmake
的编译,其中MakeFile
生成QMAKE_MANIFEST = $$PWD/x86_user.manifest.xml
)
RC_FILE = Res.rc
注意:强>
即使我们设置了.exe
(即因为这会采取行动并在编译完成后将清单注入[1,3],[3,1],[-1,-3],[-3,-1]
),这仍然有效。
你需要重新编译才能看到效果......