Como adiciono um ícone a um executável compilado mingw-gcc?

86

No Windows, usando o gcc do mingw, há alguma maneira de especificar que o arquivo exe de saída deve ter um arquivo de ícone, de modo que o arquivo exe seja exibido com esse ícone no explorer?

Mihai Limbășan
fonte

Respostas:

181

Você precisa criar o ícone primeiro. Então você precisa criar um arquivo RC com o conteúdo abaixo. Aqui vamos chamá-lo de my.rc.

id ICON "path/to/my.ico"

O idmencionado no comando acima pode ser praticamente qualquer coisa. Não importa, a menos que você queira se referir a ele em seu código. Em seguida, execute windres da seguinte forma:

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

Então, ao construir o executável, junto com outros arquivos de objeto e arquivos de recursos, inclua o my.resque obtivemos na etapa anterior. por exemplo:

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

E isso deve ser tudo o que há para fazer.


E, sem nenhum custo extra, se você quiser incluir informações de versão em seu aplicativo, adicione o seguinte texto padrão a um novo .rcarquivo e siga as etapas mencionadas acima.

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

Observe que o langID é para inglês do Reino Unido (que é a localização mais próxima da Austrália que eu consegui identificar.) Se você quiser "inglês" dos EUA, altere a BLOCK linha para:

BLOCK "040904E4"

e a linha de tradução para:

VALUE "Translation", 0x409, 1252

Consulte o recurso VERSIONINFO para obter informações.

Evan
fonte
6
Seria ótimo se o exemplo mostrasse onde inserir a linha ICON.
chacham15
E ... em segundo lugar .. stackoverflow.com/questions/1411040/…
Erik Friesen
você também pode incluir várias "Traduções" (está apenas informando ao Windows que este programa está traduzido) apenas acrescentando WORD, pares VALUE "Translation", 0x409, 1252, 0x809, 1252de palavras , por exemplo: habilitaria o inglês dos EUA e do Reino Unido de acordo com msdn.microsoft.com/en-us/ library / aa381058.aspx . Isso também informa que você pode incluir mais de um 'BLOCK "lang04E4"'
WorldSEnder
Usei o utilitário gratuito da Nirsoft IconsExtractpara obter um ícone embutido em um exeque eu precisava.
Evgeni Sergeev
6

No arquivo RC, o nameID nem precisa ser um nome, pode ser apenas um número inteiro. O nome do arquivo deve ser colocado entre aspas apenas se contiver um espaço. Ao invés de:

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

Você pode usar:

windres my.rc my.o
Steven Penny
fonte
1
Não consegui vincular o my.ocom MinGW g++depois windres my.rc my.o(alguma WinMainmensagem de erro relacionada), mas o windres my.rc -O coff -o my.rescaminho funcionou bem.
Evgeni Sergeev
.o(= COFF automaticamente; nomeio assim my.res.opara maior clareza) funciona para mim. Na verdade, os .resarquivos produzidos por MSVC têm um formato diferente, então parece ser estranho / incompatível usando COFF em.res
kxr
1

Experimente Resource Hacker. Consegui compilar meu projeto no Linux (WSL) e gerar um ícone do logotipo na página inicial. Só precisava de uma maneira simples de incorporá-lo ao exe e este programa funcionou muito bem. Resource Hacker por Angus Johnson

ninguém
fonte
Isso era muito mais fácil. Basta abrir o .exe, clicar em "Adicionar recurso binário ou de imagem", abrir o arquivo .ico e salvar.
endolith de