Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Qt Creator: how to embed custom manifest in .exe

Tags:

cmake

qt

I have a custom Manifest file and would like to embed it inside the executable. I use MS Visual Studio 2010 compiler and Qt 5.2.1.

I use Qt Creator as the IDE and CMake for making release builds. What options should I set in .pro and CMake files?

I tried to pass '/MANIFEST...' like flags to the linker, but they seem to be unsupported by VS 2010 linker.

like image 926
rkudinov Avatar asked Feb 06 '23 20:02

rkudinov


1 Answers

Eventually I've found the solution.

First it is necessary to add the following line to the .pro file:

CONFIG -= embed_manifest_exe

this will disable embedding of the default manifest file. After that it is necessary to add a windows resource file:

RC_FILE = app_resources.rc

.rc file is usually included to embed version information into .exe, but as soon as manifest is also a part of the executable resources we could reference a custom manifest file in it, just add the following line into app_resources.rc:

1 24 myapp.exe.manifest

where 1 is the resource ID, 24 is the resource type - RT_MANIFEST, and myapp.exe.manifest is the file with our custom manifest. If you don't need version info then app_resources.rc may contain just this single line.

That's it.

For CMake the steps are as follows:

1) include app_resources.rc in the list of sources of the target

2) add the following line to disable embedding of a default manifest file:

set(CMAKE_EXE_LINKER_FLAGS "/MANIFEST:NO")

For some unknown for me reasons /MANIFEST:NO didn't work in .pro file. The linker failed with an unknown option error. However it works in CMake. The linker is the same from VS 2010...

like image 63
rkudinov Avatar answered Feb 08 '23 15:02

rkudinov