{"id":64,"date":"2020-10-13T21:23:40","date_gmt":"2020-10-13T19:23:40","guid":{"rendered":"https:\/\/www.dafabhoid.de\/?p=64"},"modified":"2020-10-13T21:24:16","modified_gmt":"2020-10-13T19:24:16","slug":"mit-cmake-mingw-windows-ressourcen-in-die-exe-bauen","status":"publish","type":"post","link":"https:\/\/www.dafabhoid.de\/?p=64","title":{"rendered":"Mit CMake + MinGW Windows-Ressourcen in die .exe bauen"},"content":{"rendered":"\n<p>F\u00fcr den Bau einer Windows DLL oder EXE ist es meistens erforderlich, eine Ressourcendatei (.rc) zu integrieren. In dieser gibt man beispielsweise <a href=\"https:\/\/docs.microsoft.com\/en-us\/windows\/win32\/menurc\/versioninfo-resource\">Versionsinformationen<\/a> an oder versieht eine Anwendung mit einem <a href=\"https:\/\/docs.microsoft.com\/en-us\/windows\/win32\/menurc\/icon-resource\">Icon<\/a>. Dazu \u00fcbersetzt man die .rc-Datei mit dem Programm <em>windres<\/em> in eine Objektdatei und linkt diese in die ausf\u00fchrbare Datei.<\/p>\n\n\n\n<p>CMake \u00fcbernimmt diese Aufgabe automatisch, man muss lediglich die .rc-Datei als Quelldatei mit angeben:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>add_executable(App main.c icon.rc version.rc)<\/code><\/pre>\n\n\n\n<p>So zumindest in der Theorie. So ganz automatisch ging das dann doch nicht, zumindest nicht bei mir. Zuerst musste ich CMake mitteilen, dass es die .rc-Dateien \u00fcbersetzen soll:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>enable_language(RC)<\/code><\/pre>\n\n\n\n<p>Damit funktioniert das ganze schon mal mit dem Microsoft-Compiler und dessen <em>windres<\/em>. Auch MinGW bringt den <em>windres<\/em>-Compiler mit, allerdings mit anderen Aufrufparametern. Daher schlug die \u00dcbersetzung der .rc-Dateien fehl. Um CMake den korrekten Aufruf mitzuteilen, war ein weiterer Befehl n\u00f6tig:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>if (${MINGW})\n    SET(CMAKE_RC_COMPILE_OBJECT \"&lt;CMAKE_RC_COMPILER> &lt;FLAGS> -O coff &lt;DEFINES> -i &lt;SOURCE> -o &lt;OBJECT>\")\nendif()<\/code><\/pre>\n\n\n\n<p>Eigentlich sollte CMake seit Version 2.8.7 auch mit MinGW-windres zusammenarbeiten, zumindest <a href=\"https:\/\/github.com\/TigerVNC\/tigervnc\/blob\/2ca7d264e39ee6f7d934115ecc8ffb20244c75a2\/CMakeLists.txt#L112\">laut dem TigerVNC-Projekt<\/a>. Trotz der von mir verwendeten Version 3.12 hatte ich jedoch nur mit obigem Workaround Erfolg.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>F\u00fcr den Bau einer Windows DLL oder EXE ist es meistens erforderlich, eine Ressourcendatei (.rc) zu integrieren. In dieser gibt man beispielsweise Versionsinformationen an oder versieht eine Anwendung mit einem Icon. Dazu \u00fcbersetzt man die .rc-Datei mit dem Programm windres in eine Objektdatei und linkt diese in die ausf\u00fchrbare Datei. CMake \u00fcbernimmt diese Aufgabe automatisch, [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[14,12,15],"class_list":["post-64","post","type-post","status-publish","format-standard","hentry","category-uncategorized","tag-cmake","tag-mingw","tag-windres"],"_links":{"self":[{"href":"https:\/\/www.dafabhoid.de\/index.php?rest_route=\/wp\/v2\/posts\/64","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.dafabhoid.de\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.dafabhoid.de\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.dafabhoid.de\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.dafabhoid.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=64"}],"version-history":[{"count":1,"href":"https:\/\/www.dafabhoid.de\/index.php?rest_route=\/wp\/v2\/posts\/64\/revisions"}],"predecessor-version":[{"id":65,"href":"https:\/\/www.dafabhoid.de\/index.php?rest_route=\/wp\/v2\/posts\/64\/revisions\/65"}],"wp:attachment":[{"href":"https:\/\/www.dafabhoid.de\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=64"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.dafabhoid.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=64"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.dafabhoid.de\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=64"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}