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

теоретически очень легко создать приложение Win32 с файлом ресурсов с помощью cmake. В файл ресурсов может быть указан так же легко, как 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 создает , который ld не понимать.

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

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

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

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

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 человек

редактировать автор вопроса...

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