Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Compilar para distintas plataformas (C++)

Iniciado por _CONEJO, 11 de Agosto de 2009, 09:24:49 PM

« anterior - próximo »

_CONEJO

Hola,

Tengo un desarrollo para múltiples plataformas (PC, Wii,...) El problema es que me gustaría saber cómo puedo hacer para compilar para una u otra plataforma de manera sencilla. En mi proyecto tengo una "capa de abstracción" para gráficos/sonido/input de tal manera que de cara al juego son las mismas funciones (por ejemplo Control.A Sonido.start() ....) Luego, en cada clase correspondiente ya lo manejo de forma diferente según sea la plataforma. Hasta ahora lo he ido haciendo "a mano" comentando las lineas correspondientes. Pero puede ser un engorro tener que modificar mil líneas en diferentes archivos.

No estoy seguro, pero imagino que se podrá hacer algo, pero no sé exactamente qué, ni como buscarlo (al menos, hasta ahora, no he tenido éxito).


Saludos

flipper83

si utilizas visual estudio puedes definir etiquetas de preprocesado.
un cobarde forero en el tanatorio al mes sería un placentero trofeo digno de merecer

fjfnaranjo

fjfnaranjo.com - Creating entertainment - Creando entretenimiento
fjfnaranjo [4t] gm4il [d0t] c0m (mail y msn)

_CONEJO


flipper83

es más jodido pero puedes hacerlo con tareas de ant q preprocessen tu código, esto lo se porq lo he hecho, pero estoy seguro q existe por ahí algún preprocesador para eclipse.

No se si sabes bien como funciona el preproceso.
un cobarde forero en el tanatorio al mes sería un placentero trofeo digno de merecer

_CONEJO

El uso del preprocesador lo sé en teoría, nunca me ha dado por usarlo específicamente (fuera de includes y defines).

Imagino que será algo así

Código (cpp) [Seleccionar]
#ifdef WINDOWS
    ... /* Windows specific code */
#elif defined(UNIX)
    ... /* Unix specific code */
#else
    #error "What's your operating system?"
#endif


El problema es donde definir "WINDOWS", "UNIX",... en el makefile?

Prompt

Cita de: _CONEJO en 12 de Agosto de 2009, 08:12:44 AM

El problema es donde definir "WINDOWS", "UNIX",... en el makefile?


Viene definido en el compilador / headers del mismo de las diferentes plataformas.

_CONEJO

¿Alguna forma de saber cual es el que está definido en determinado compilador? Poruqe ni idea de cual será el de Wii/DS ...


*Si, parezco/soy tonto, lo mio es un poco más de IA y programación más teórica que de práctica... jajaja

Prompt

Pues en Wii y DS no tengo la más remota idea, habrá que mirar la documentación no?

Warchief

Son definiciones para el preprocesador que se ponen por configuración y plataforma (creo que en Makefiles es lo que se llama target).

Lo que se le indica al compilador es la plataforma de destino. ¿Qué compilador usas para Wii y DS? ¿gcc? Que no tiene necesariamente que ver con el código para cada plataforma. De hecho mucho del código es compartido (todo excepto el que implica llamadas al sistema operativo y al sdk concretos).

Por ejemplo, si tenemos un proyecto con estos ficheros:
render.win32.cpp  // render específico para win
render.mac.cpp // render específico para mac
render.h // interfaz para el render
program.cpp // programa común que usa el render

Tendrás que tener dos configuraciones, o proyectos, uno para compilar para windows y otro para mac. En eclipse + linux no sé si tienes que crear dos proyectos o puedes configurar mediante GUI o tocar el makefile a mano.

Puedes hacerlo incluyendo sólo los ficheros que necesitas o bien mediante las directivas del preprocesador:
#if defined( PLATFORM_WIN )
#    include "render.win32.cpp"
#elif defined( PLATFORM_MAC )
#    include "render.mac.cpp"
#else
#    error "Platform not defined"
#endif
En un fichero adicional render.cpp con sólo ese código, y añadiendo el fichero render.cpp al proyecto.

@Prompt
¿Qué quieres decir con que viene en el compilador / headers?
Si te refieres al Platform SDK, puede hacer uso de algunas internas, pero no son las que tienes que usar el programa. Por ejemplo, <windows.h> en Windows tiene varias definiciones, pero no puedes hacer include de ese fichero si no estás en windows. Tienes que usar las tuyas propias para saber si tienes que incluir <windows.h> o no; y esas tuyas propias se definen en el target del makefile (en el caso de entornos visuales mediante el GUI).

Warchief

#10
SI usas gcc, en la línea de comandos es la opción -D

Ejemplo: gcc -DPLATFORM_WIN
Define PLATFORM_WIN.


Link de ayuda:
http://www.ccs.neu.edu/home/sbratus/cpp/make-help.txt







Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.