Как мне создать приложение Win32 с файлом ресурсов, используя cmake и MinGW? - PullRequest
12 голосов
/ 20 августа 2010

Теоретически, очень легко создать приложение 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 генерирует файл <whatever>.rc.res, который ld не понимает.

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

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

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

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

1 Ответ

6 голосов
/ 23 августа 2010

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

<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 / вики / MS_resource_compiler

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

человек с ветром

РЕДАКТИРОВАТЬ по автору вопроса ...

Фиксированный фрагмент кода 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 в шаблон команды, но это работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...