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