Qt Creator:如何在.exe中嵌入自定义清单

时间:2016-10-27 14:10:37

标签: qt cmake

我有一个自定义的Manifest文件,并希望将其嵌入可执行文件中。我使用MS Visual Studio 2010编译器和Qt 5.2.1。

我使用Qt Creator作为IDE,使用CMake进行发布版本。 我应该在.pro和CMake文件中设置哪些选项?

我试图通过' / MANIFEST ...'比如链接器的标志,但它们似乎不受VS 2010链接器支持。

3 个答案:

答案 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.rc

2)添加以下行以禁用默认清单文件的嵌入:

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] ),这仍然有效。

你需要重新编译才能看到效果......