Как мне создать приложение Win32 с файлом ресурсов, используя cmake и MinGW?

Теоретически, очень легко создать приложение Win32 с файлом ресурсов, используя cmake. В команде add_executable файл ресурсов можно перечислить так же легко, как исходный файл C или C ++. Однако существует известная ошибка при сборке с использованием инструментов MinGW.

Я нашел обходной путь, который должен включать следующее в CMakeFiles. TXT ...

if(MINGW)
  set(CMAKE_RC_COMPILER_INIT windres)
  ENABLE_LANGUAGE(RC)
  SET(CMAKE_RC_COMPILE_OBJECT
      "<CMAKE_RC_COMPILER> <FLAGS> <DEFINES> -o <OBJECT> <SOURCE>")
endif(MINGW)

К сожалению, это не похоже на работу. Похоже, что windres генерирует файл .rc.res , который ld не понимает.

В моих поисках я У нас появилось сильное подозрение, что поддержка Win32 рассматривается как очень низкий приоритет, особенно за пределами Visual Studio. Это понятно, поскольку Win32, очевидно, не так важен, как раньше. И, конечно, Visual Studio Express Edition легко доступны бесплатно.

Тем не менее, мне было бы удобно использовать MinGW GCC для нескольких старых приложений Win32, которые я до сих пор использую. Если ничего другого, я могу получить статистику покрытия теста GCOV.

Очевидно, что если все остальное терпит неудачу, я всегда мог обработать файлы ресурсов, используя собственную команду сборки. Одна проблема в том, что я не знаком ни с Windres, ни с LD, или как MinGW предназначен для обработки файлов ресурсов Win32. Во-вторых, я не хочу заново изобретать колесо, если у кого-то уже есть превосходное колесо, которым он хотел бы поделиться со мной.

В общем, все - как я могу поддерживать создание приложений Win32 с файлами ресурсов с использованием cmake, и используя MinGW (но не нарушая поддержку Visual Studio)?

12
задан Steve314 19 August 2010 в 22:27
поделиться

1 ответ

Я думаю, ваша проблема здесь:

<CMAKE_RC_COMPILER> <FLAGS> <DEFINES> -o <OBJECT> <SOURCE>

Может быть, вам следует написать что-то вроде этого:

<CMAKE_RC_COMPILER> <SOURCE> <OBJECT>

Или более формально:

<CMAKE_RC_COMPILER> -i <SOURCE> -o <OBJECT>

Другая возможная проблема может заключаться в том, какое расширение делает cmake заменители? Поскольку windress угадает из этого необходимый формат выходного файла.

Ссылки здесь: www.mingw.org/wiki/MS_resource_compiler

Файлы "res" не подходят для ld, как вы уже знаете, и пример windres sourceware.org/binutils/docs/binutils/windres.html

windres man

EDIT автор вопроса ...

Фиксированный фрагмент кода cmake выглядит следующим образом ...

if(MINGW)
  set(CMAKE_RC_COMPILER_INIT windres)
  ENABLE_LANGUAGE(RC)
  SET(CMAKE_RC_COMPILE_OBJECT
    "<CMAKE_RC_COMPILER> <FLAGS> -O coff <DEFINES> -i <SOURCE> -o <OBJECT>")
endif(MINGW)

Вероятно, следует установить переменную flags, а не вставлять параметр -O в шаблон команды, но это работает.

6
ответ дан 2 December 2019 в 23:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: