Theoretisch ist es sehr einfach, eine Win32-Anwendung mit einer Ressourcendatei mithilfe von cmake zu erstellen. In einem add_executable
Befehl kann eine Ressourcendatei so einfach wie eine C- oder C++ - Quelldatei aufgelistet werden. Beim Erstellen mit MinGW-Tools ist jedoch ein bekannter Fehler bekannt.Wie erstelle ich eine Win32-App mit einer Ressourcendatei mit Cmake und MinGW?
fand ich eine Abhilfe, die die folgenden in CMakeFiles.txt enthalten ist ...
if(MINGW)
set(CMAKE_RC_COMPILER_INIT windres)
ENABLE_LANGUAGE(RC)
SET(CMAKE_RC_COMPILE_OBJECT
"<CMAKE_RC_COMPILER> <FLAGS> <DEFINES> -o <OBJECT> <SOURCE>")
endif(MINGW)
Leider scheint dies nicht zu arbeiten. Was scheint zu passieren ist, dass windres
erzeugt eine <whatever>.rc.res
Datei, die ld
nicht versteht.
Bei meinen Suchen habe ich den starken Verdacht entwickelt, dass Win32-Unterstützung als sehr niedrige Priorität angesehen wird, insbesondere außerhalb von Visual Studio. Dies ist verständlich, da Win32 offensichtlich nicht so wichtig ist wie früher. Und natürlich sind Visual Studio Express Editions kostenlos verfügbar.
Trotzdem wäre es für mich bequem, wenn ich MinGW GCC für ein paar alte Win32-Apps verwenden könnte, die ich noch benutze. Wenn nichts anderes, kann ich GCOV Test Coverage Statistiken erhalten.
Offensichtlich, wenn alles andere fehlschlägt, könnte ich immer mit Ressourcendateien mit einem benutzerdefinierten Build-Befehl umgehen. Ein Problem ist, dass ich weder mit windres oder ld vertraut bin, noch wie MinGW mit Win32-Ressourcendateien umgehen soll. Ein anderes ist, dass ich das Rad nicht wirklich neu erfinden möchte, wenn jemand bereits ein überlegenes Rad hat, das sie mit mir teilen möchten.
Also das ist es im Grunde - wie kann ich Win32-Anwendungen mit Ressourcen-Dateien mit Cmake und MinGW (aber nicht brechen Unterstützung für Visual Studio) unterstützen?
Danke für die Antwort. Ich bin beschäftigt ATM, so dass es ein paar Tage dauern kann, bevor ich das noch einmal untersuchen kann.Eine Sache, auf die ich hinweisen werde - ich habe versucht, cmake zu sagen, eine andere Erweiterung zu verwenden. Es gibt eine Variable, die angibt, welche Erweiterung verwendet wird, und ich habe versucht, das nach der 'enable_language' oben zu ändern, zusammen mit der Änderung des which-compilers. cmake ging weiter und benutzte '.res' sowieso - weiß nicht warum. Anyway, +1, weil an dieser Stelle alles hilfreich ist, aber es kann eine Weile dauern, bevor ich es ausprobiere. – Steve314
Ich habe die Zeit, damit wieder zu spielen, und es stellt sich heraus, dass das Hauptproblem ist, dass, obwohl ich dies als ein Dateiformat Problem beschrieben habe ich zuerst/vor allem als Dateierweiterung Problem gedacht. Die Lösung bestand darin, das Handbuch von windres erneut zu lesen, und es war sinnvoll, das Coff-Ausgabeformat mit "-Ocoff" zu spezifizieren, unabhängig von der Dateierweiterung. Ich hätte wahrscheinlich die Variable cmake für RC-Flags herausfinden sollen, aber nachdem die Dateierweiterungsvariable nicht funktionierte, habe ich einfach die Option in den Template-Befehl eingefügt. – Steve314
Ich hoffe, es macht Ihnen nichts aus, dass ich ein wenig zu Ihrer Antwort hinzufüge, bevor ich sie akzeptiere. – Steve314