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

问题描述 投票:0回答:3

我有一个自定义清单文件,想将其嵌入到可执行文件中。我使用 MS Visual Studio 2010 编译器和 Qt 5.2.1。

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

我尝试将“/MANIFEST...”之类的标志传递给链接器,但 VS 2010 链接器似乎不支持它们。

qt cmake
3个回答
5
投票

最终我找到了解决方案。

首先需要将以下行添加到 .pro 文件中:

CONFIG -= embed_manifest_exe

这将禁用默认清单文件的嵌入。之后需要添加windows资源文件:

RC_FILE = app_resources.rc
通常包含 .rc 文件以将版本信息嵌入到 .exe 中,但是一旦清单也是可执行资源的一部分,我们就可以在其中引用自定义清单文件,只需将以下行添加到 app_resources.rc 中:

1 24 myapp.exe.manifest

其中 1 是资源 ID,24 是资源类型 - RT_MANIFEST,myapp.exe.manifest 是包含我们的自定义清单的文件。 如果您不需要版本信息,那么 app_resources.rc 可能只包含这一行。

就是这样。

对于CMake,步骤如下:

1) 将 app_resources.rc 包含在目标源列表中

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

set(CMAKE_EXE_LINKER_FLAGS "/MANIFEST:NO")

由于一些我未知的原因 /MANIFEST:NO 在 .pro 文件中不起作用。链接器因未知选项错误而失败。但它在 CMake 中有效。链接器与 VS 2010 相同...


3
投票
使用下面基于

qmake script

manifest injection
,您不需要在任何
*.rc
文件中包含清单(适用于基于
Makefile
的编译,其中
qmake
确实生成
Makefile

QMAKE_MANIFEST = $$PWD/x86_user.manifest.xml

注: 即使我们设置了 RC_FILE = Res.rc

(即,因为这会在编译完成后采取行动并将清单注入到 
.exe
),这仍然有效。
需要重新编译才能看到效果...


1
投票
发行说明

)。

© www.soinside.com 2019 - 2024. All rights reserved.