Як додати піктограму до компільованого виконуваного файлу mingw-gcc?


86

У Windows, використовуючи gcc mingw, чи є в будь-якому випадку вказати, що вихідний файл exe повинен взяти файл значка, щоб файл exe відображався з цим значком у провіднику?

Відповіді:


181

Спочатку потрібно створити піктограму. Потім вам потрібно створити RC-файл із вмістом нижче. Тут ми будемо називати це як my.rc.

id ICON "path/to/my.ico"

idЗазначено вище в команді може бути в значній мірі все. Це не має значення, якщо ви не хочете посилатися на це у своєму коді. Потім виконайте обмотки таким чином:

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

Потім, будуючи виконуваний файл, разом з іншими об’єктними файлами та файлами ресурсів, включайте те, my.resщо ми отримали з вищевказаного кроку. наприклад:

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

І це мало б бути все.


І без додаткової плати, якщо ви хочете включити інформацію про версію у свою програму, додайте наступний шаблон до нового .rcфайлу та виконайте вищезазначені дії.

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

Зверніть увагу, що langID стосується англійської мови (яка є найближчою до Австралії локалізацією, яку я міг би визначити.) Якщо ви хочете, щоб американська мова була англійською, змініть BLOCK рядок на:

BLOCK "040904E4"

і рядок перекладу до:

VALUE "Translation", 0x409, 1252

Для отримання додаткової інформації див. Ресурс VERSIONINFO .


6
Було б чудово, якби приклад показав, куди вставити рядок ICON.
chacham15


Ви також можете включити декілька "Перекладів" (це просто вказівка ​​Windows, що ця програма перекладена), просто додавши слова WORD, WORD-пари, наприклад: VALUE "Translation", 0x409, 1252, 0x809, 1252увімкне як англійську, як США, так і Великобританію згідно msdn.microsoft.com/en-us/ library / aa381058.aspx . Це також говорить вам, що ви можете включити більше одного "BLOCK" lang04E4 "'
WorldSEnder

Я скористався безкоштовною утилітою Nirsoft, IconsExtractщоб отримати вбудовану в потрібну exeмені піктограму .
Євген Сергєєв

6

У файлі RC ідентифікатор name навіть не повинен бути ім'ям, це може бути просто ціле число. Ім'я файлу має бути вказано в лапках, лише якщо воно містить пробіл. Замість:

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

Ви можете використовувати:

windres my.rc my.o

1
Я не зміг зв’язати my.oз MinGW g++після windres my.rc my.o(якесь WinMainповідомлення про помилку), але windres my.rc -O coff -o my.resшлях працював нормально.
Євген Сергєєв

.o(= COFF автоматично; я називаю це як my.res.oдля ясності) працює для мене. Фактично .resфайли, створені MSVC, мають інший формат, тому видається дивним / несумісним за допомогою COFF в.res
kxr

1

Спробуйте Resource Hacker. Я зміг скомпілювати свій проект у Linux (WSL) та створити піктограму з логотипу на домашній сторінці. Просто потрібен був простий спосіб вбудувати його в exe, і ця програма чудово працювала. Ресурсний хакер Ангуса Джонсона


Це було набагато простіше. Просто відкрив .exe, клацнувши "Додати двійковий або графічний ресурс", відкривши файл .ico та збереживши.
ендоліти
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.