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

87

Dans 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?

Mihai Limbășan
la source

Réponses:

182

Vous devez d'abord créer l'icône. Ensuite, vous devez créer un fichier RC avec le contenu ci-dessous. Ici, nous allons le nommer my.rc.

id ICON "path/to/my.ico"

Le idmentionné dans la commande ci-dessus peut être à peu près n'importe quoi. Cela n'a pas d'importance à moins que vous ne vouliez y faire référence dans votre code. Exécutez ensuite windres comme suit:

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

Ensuite, lors de la construction de l'exécutable, ainsi que d'autres fichiers objets et fichiers de ressources, incluez ceux my.resque nous avons obtenus à l'étape ci-dessus. par exemple:

g++ -o my_app obj1.o obj2.o res1.res 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 à un nouveau .rcfichier et suivez les étapes mentionnées ci-dessus.

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

Notez que 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 BLOCK ligne en:

BLOCK "040904E4"

et la ligne de traduction vers:

VALUE "Translation", 0x409, 1252

Voir la ressource VERSIONINFO pour plus d'informations.

Evan
la source
6
Ce serait formidable si l'exemple montrait où insérer la ligne ICON.
chacham15
Et ... deuxièmement .. stackoverflow.com/questions/1411040/…
Erik Friesen
vous pouvez également inclure plusieurs "Traductions" (il indique simplement à Windows que ce programme est traduit) en ajoutant simplement WORD, WORD-paires, par exemple: activeraitVALUE "Translation", 0x409, 1252, 0x809, 1252 à la fois l' anglais américain et britannique selon msdn.microsoft.com/en-us/ bibliothèque / aa381058.aspx . Cela vous indique également que vous pouvez inclure plus d'un 'BLOCK "lang04E4"'
WorldSEnder
J'ai utilisé l'utilitaire gratuit de Nirsoft IconsExtractpour obtenir une icône intégrée dans un exedont j'avais besoin.
Evgeni Sergeev
6

Dans le fichier RC, le nameID n'a même pas besoin d'être un nom, il peut simplement s'agir d'un entier. Le nom de fichier ne doit être entre guillemets 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
Steven Penny
la source
1
Je ne pouvais pas lier le my.oavec MinGW g++après windres my.rc my.o(un WinMainmessage d'erreur lié), mais le windres my.rc -O coff -o my.reschemin fonctionnait bien.
Evgeni Sergeev
.o(= COFF automatiquement; je le nomme comme my.res.opour plus de clarté) fonctionne pour moi. En fait, les .resfichiers produits par MSVC ont un format différent, il semble donc étrange / incompatible d'utiliser COFF dans.res
kxr
1

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

noabody
la source
C'était bien plus facile. Il suffit d'ouvrir le fichier .exe, de cliquer sur "Ajouter une ressource binaire ou d'image", d'ouvrir le fichier .ico et de le sauvegarder.
endolith