En teoría, es muy fácil construir una aplicación Win32 con un archivo de recursos usando cmake. En un comando add_executable
, un archivo de recursos se puede enumerar tan fácilmente como un archivo fuente C o C++. Sin embargo, existe un error conocido al construir usando herramientas MinGW.¿Cómo construyo una aplicación Win32 con un archivo de recursos usando cmake y MinGW?
He encontrado una solución alternativa, que es incluir lo siguiente en 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)
Desafortunadamente, esto no parece funcionar. Lo que parece suceder es que windres
genera un archivo <whatever>.rc.res
que ld
no comprende.
En mis búsquedas, he desarrollado una fuerte sospecha de que el soporte de Win32 se considera una prioridad muy baja, especialmente fuera de Visual Studio. Esto es comprensible, ya que Win32 obviamente no es tan importante como lo era antes. Y, por supuesto, Visual Studio Express Editions está disponible de forma gratuita.
Aún así, sería conveniente para mí si pudiera usar MinGW GCC para algunas aplicaciones antiguas de Win32 que aún utilizo. Si nada más, puedo obtener estadísticas de cobertura de prueba GCOV.
Obviamente si todo lo demás falla, siempre podría manejar los archivos de recursos usando un comando de compilación personalizado. Un problema es que no estoy familiarizado con windres o ld, o cómo MinGW está destinado a manejar archivos de recursos de Win32. Otra es que realmente no quiero reinventar la rueda si alguien ya tiene una rueda superior que les gustaría compartir conmigo.
Así que, básicamente, ¿cómo puedo apoyar la construcción de aplicaciones Win32 con archivos de recursos usando cmake y usando MinGW (pero no rompiendo el soporte para Visual Studio)?
Gracias por la respuesta. Estoy ocupado cajero automático, por lo que pueden pasar algunos días antes de que pueda ver esto de nuevo.Una cosa que señalaré fue: intenté decirle a cmake que usara otra extensión. Hay una variable que especifica qué extensión se usa, e intenté cambiarla después del 'enable_language' anterior junto con el compilador which-change. cmake siguió adelante y usó '.res' de todos modos, no sé por qué. De todos modos, +1 porque hay algo útil en este punto, pero puede pasar un tiempo antes de que lo intente. – Steve314
Volví a jugar con esto otra vez, y resulta que el principal problema es que aunque describí esto como un problema de formato de archivo, estaba pensando en primer lugar como un problema de extensión de archivo. La solución fue revisar el manual de los windres y tener el sentido de intentar especificar el formato de salida coff usando '-O coff' independientemente de la extensión de archivo trabajada. Probablemente debería haber averiguado la variable que usa cmake para las banderas de RC, pero después de que la variable de extensión de archivo no funcionó, simplemente inserté la opción en el comando de la plantilla. – Steve314
espero que no te importe que agregue un poco a tu respuesta antes de aceptarla. – Steve314