web-dev-qa-db-fra.com

Comment ajouter une icône à un exécutable compilé mingw-gcc?

Sous Windows, en utilisant le gcc de mingw, est-il possible de spécifier que le fichier exe de sortie doit prendre un fichier icône, de sorte que le fichier exe s'affiche avec cette icône dans l'explorateur?

80
myforwik

Vous devez d'abord créer l'icône. Ensuite, vous devez créer un fichier RC qui ressemble à ceci:

id ICON "path/to/my.ico"

L'ID peut à peu près n'importe quoi. Cela n'a pas d'importance, sauf si vous voulez vous y référer dans votre code. Exécutez ensuite windres comme suit:

windres my.rc -O coff -o my.res

Ensuite, vous incluez simplement my.res avec vos fichiers objet lorsque vous liez, par exemple:

g++ -o my_app obj1.o obj2.o my.res

Et cela devrait être tout ce qu'il y a à faire.


Et, sans frais supplémentaires, si vous souhaitez inclure des informations de version dans votre application, ajoutez le passe-partout suivant à votre .rc fichier et modifiez de manière appropriée:

1 VERSIONINFO
FILEVERSION     1,0,0,0
PRODUCTVERSION  1,0,0,0
BEGIN
  BLOCK "StringFileInfo"
  BEGIN
    BLOCK "080904E4"
    BEGIN
      VALUE "CompanyName", "My Company Name"
      VALUE "FileDescription", "My excellent application"
      VALUE "FileVersion", "1.0"
      VALUE "InternalName", "my_app"
      VALUE "LegalCopyright", "My Name"
      VALUE "OriginalFilename", "my_app.exe"
      VALUE "ProductName", "My App"
      VALUE "ProductVersion", "1.0"
    END
  END
  BLOCK "VarFileInfo"
  BEGIN
    VALUE "Translation", 0x809, 1252
  END
END

Remarque, le langID est pour l'anglais britannique (qui est la localisation la plus proche de l'Australie que j'ai pu identifier.) Si vous voulez "anglais" américain, changez la ligne BLOCK en:

BLOCK "040904E4"

et la ligne de traduction vers:

VALUE "Translation", 0x409, 1252

Voir ressource VERSIONINFO pour plus d'informations.

173
Evan

Dans le fichier RC, le nameID n'a même pas besoin d'être un nom, il peut simplement être un entier. Le nom de fichier ne doit être cité que s'il contient un espace. Au lieu de:

windres my.rc -O coff -o my.res

Vous pouvez utiliser:

windres my.rc my.o
5
Steven Penny

Essayez Resource Hacker. J'ai pu croiser la compilation de mon projet sous Linux (WSL) et générer une icône à partir du logo sur la page d'accueil. J'avais juste besoin d'un moyen simple de l'intégrer dans l'exe et ce programme a très bien fonctionné. Pirate de ressources par Angus Johnson

0
noabody