Version, Copyright usw. beim compilen setzten?
-
Hallo zusammen,
ich suche schon eine ganze Weile ob es möglich ist die Metadaten von exe Files unter Windows wie Dateiversion, Copyright und am besten auch das Icon der exe beim compilieren zu definieren.
Unter VisualStudio scheint es ein ResourceFile zu geben wo man so etwas definieren kann aber wie schaut es allgemein aus? Gibt es eine Möglichkeit die Parameter direkt beim Aufruf von g++ anzugeben?Ich arbeite mit Netbeans und compiliere unter MinGW und g++ in Version 4.5.2.
Danke schonmal
Maick
-
Naja, so was muß man in einem Build-Step definieren können. Die IDEs verstecken das nur, in dem sie eine GUI dafür anbieten. Aber letztendlich tragen die das auch nur in einem Build-Script ein, welche Dateien zum Bauen benutzt werden sollen. Das hat also nichts mit dem g++ oder MSC direkt zu tun.
Was benutzt du denn? make? bjam? ...
-
Hi Artchi,
Netbeans erzeugt ein Makefile zum compilen und linken. Innerhalb des makefiles bestimme ich die aktuelle Versionsnummer und übergebe diese dem g++. Diese Nummer würde ich dann gerne - wenn möglich - in die Metadaten eintragen.
-
Welche Metadaten? Wo befinden sich diese? Wenn das Makefile immer wieder durch Netbeans neu erzeugt/überschrieben wird, musst du evtl. einen Pre-Pre-Build-Script bauen. Also Netbeans-Dateien selbst manipulieren.
Ich frage mich allerdings, welchen Sinn das haben soll? Denn letztendlich bleibt einem nie erspart, irgendwann manuell einen Versions-Eintrag zu tätigen, solange dieses nicht bei jedem Build neu gemacht werden muss.
-
Mich interessieren wie gesagt die Daten die Windows im rechts Klick Menü Eigenschaften/Details View anzeigt also:
Dateiversion
Produktname
Produktversion
Copyright
Änderungsdatum
Sprache
OriginaldateinameGenau ich kann dann ja so einen zusätzlichen Build Block definieren und diesem die Daten mitgeben - aber das weiß ich dann nicht weiter - sprich wie übergebe ich diese Parameter an den build Prozess?
Also so was wieg++ -o a.exe -setVersion 1.0 ?
oder benötige ich hier immer ein zusätzliches Tool? Irgendetwas und seien es nur leer Platzhalter muss doch an die Positionen in der exe geschrieben werden die Windows dann ausließt, um sie dann in dem View anzuzeigen oder?
-
Achso, darum geht es dir.
Also im MSC geht sowas über die Resource-Dateien und dem entsprechenden Resource-Compiler. Der wiederum (meines Wissens) aber auch nur daraus Makros in die resource.h schreibt.
Die Frage ist, ob es dafür Tools von GNU gibt? Wenn dann eher von MinGW. Die müssen ja einen Resource-Compiler und -Linker anbieten.
Wie Resource-Dateien aufgebaut sind, kann man in der MSDN erfahren. Es gibt auch kostenlose und preiswerte Resource-Editoren, wenn man kein MSVC hat und diese nicht von Hand schreiben will.
-
Ah ok verstanden - man braucht einen zusätzlichen Recource Compiler - kann ich mir die compiler und linker Optionen vom g++ ja lange ansehen.
Ich hab mal gesucht und es gibt zum Beispiel das Tool windres das zwischen rc res und coef Dateien hin und her übersetzten kann. So eine coeff Datei kann man dann wohl direkt beim linken mit g++ mit übergeben.
Mal schauen ob ich es hin bekomme so eine kleine Resource Datei zu schreiben und zu compilieren.
Hast du das schonmal alles per Hand gemacht? also rc Datei geschrieben, compiliert und mit hinzugelinkt?Danke schonmal
-
Ich nutze MSVC (also die IDE) und da ist der Resource-Editor drin und es wird im Projekt auch autom. gelinkt.
Du kannst natürlich in der MSDN die Resource-Attribute einsehen.
Und dort ist VERSIONINFO inkl. einem kompletten Beispiel zu finden.EDIT:
Resource Compiler
-
Ok mit Visual Studio scheint das ganze relativ einfach zu sein, aber wenn man versucht, das ganze per Hand zu machen - *grummel*
Ich hab mal versucht das Beispiel auf der msdn Seite zu compilieren, aber rc findet die ganzen Defines wie VS_FFI_FILEFLAGSMASK nicht - wenn ich alle Defines raus nehme, bekomme ich das zwar mit rc compiliert aber nicht mit dem g++ gelinked.
Windres funktioniert schon etwas besser. Mein minimal Beispiel schaut so ausMAINICON ICON "icon.ico" 1 VERSIONINFO PRODUCTVERSION 3, 0, 0, 0 FILEVERSION 4, 0, 3, 17 FILEFLAGSMASK 0 FILEOS 0x40000 FILETYPE 1 { BLOCK "StringFileInfo" { BLOCK "040904E4" { VALUE "CompanyName", "me" VALUE "FileDescription", "tool" VALUE "FileVersion", "1.0" VALUE "InternalName", "tool2" VALUE "LegalCopyright", "license" VALUE "OriginalFilename", "whatever" VALUE "ProductName", "my app" VALUE "ProductVersion", "1.0" } } }
das ganze lässt sich mit windres übersetzen und dann mit dem g++ linken
windres myRes.rc myRes.o
g++ -o main.exe Main.o myRes.o
das Icon klappt
die Versionsnummer klappt
aber Productversion und die Parameter die unter StringFileInfo stehen also z.B. LegalCopyright werden entweder nicht mit in die exe compiliert oder können nicht ausgelesen werden - also zumindest bleiben die Felder unter Win7 leer
Keine Idee ob das an Änderungen von Win7 liegt oder an windres oder ...
-
juhu juhu es klappt
ok was hab ich getan - ich hab noch folgenden Block, den ich leichtsinniger Weise als unwichtig abgestempelt hatte, dem äußersten Block hinzugefügt
BLOCK "VarFileInfo" { VALUE "Translation", 0x809, 1252 }
und schon tut es