2011-01-29 16 views
31

De acuerdo con qt.nokia.com, Qt es una "plataforma multiplataforma de aplicaciones y UI", que le permite "escribir código una vez para dirigirse a múltiples plataformas". El Qt SDK es un "entorno de desarrollo completo" que contiene "las herramientas que necesita para crear aplicaciones multiplataforma con Qt en una sola instalación". Qt Creator es un "IDE multiplataforma" que "se ejecuta en sistemas operativos de escritorio Windows, Linux/X11 y Mac OS X, y permite a los desarrolladores crear aplicaciones para múltiples plataformas de escritorio y dispositivos móviles".Mejores prácticas para el desarrollo "multiplataforma" con Qt

Las palabras mágicas "compilación cruzada" no se mencionan explícitamente en los elementos borrosos del sitio web. Sin embargo, un lector ingenuo podría ser perdonado por inferir que puede descargar el Qt SDK (incluido Qt Creator) para cualquier sistema host que esté utilizando para el desarrollo, crear un proyecto y escribir algún código del que pueda fácilmente generar ejecutables para Windows, Linux, Mac, etc. Por "fácil" tengo en mente algo como marcar algunas casillas de verificación en un cuadro de diálogo de configuración de compilación y presionar el botón "Compilar".

¡Todavía estoy buscando esas casillas de verificación! Mientras tanto, he encontrado varias publicaciones, aquí y en otras partes, sobre la instalación de un compilador cruzado, la instalación de binarios adicionales, la reescritura de su archivo qmake, etc. Desde el marketing, esperaba que la compilación cruzada ya estuviera completa y directamente respaldada. una instalación "lista para usar" de las herramientas IDE y SDK. ¿Me estoy perdiendo algo obvio?

Si no, tengo máquinas de desarrollo disponibles con los tres sistemas operativos. ¿Debo simplemente instalar Qt Creator en las tres plataformas? Si hago eso, ¿puedo esperar tomar un proyecto Qt (o tal vez solo el código fuente) que he desarrollado usando Qt Creator para, digamos, Windows, copiarlo en mi máquina Mac o Linux y compilarlo? allí usando la versión de Qt Creator para esa plataforma, sin toparse con algunos problemas importantes? ¿Podría ser esa la mejor práctica para usar Qt para crear ejecutables para plataformas múltiples, frente a la instalación de herramientas de compilación cruzada en un único host de desarrollo?

+1

Gracias a todos por las respuestas rápidas ... Como se indica en el título original, creo que esta es una "pregunta muy básica", pero importante. A veces las preguntas básicas no se abordan en nuestra impaciencia por los detalles. A partir de las respuestas iniciales, parece que hay bastantes opiniones sobre las mejores prácticas para usar Qt como una solución para desarrollar una aplicación para múltiples plataformas. –

Respuesta

21

lema de Qt es:

de una sola escritura, compilar todas partes.

Teniendo esto en cuenta, Qt no ofrece oficialmente ninguna solución inmediata para la compilación cruzada de aplicaciones Qt desde una plataforma específica a otras plataformas diferentes. Aunque es definitivamente factible, si se invierte mucho tiempo y trabajo, la buena práctica común de Qt le sugerirá que construya su aplicación Qt directamente en la plataforma objetivo. Eso significa, construya su objetivo de Windows para su aplicación, una máquina de Windows, su objetivo de Mac en una máquina de Mac y un destino de Linux en una, usted acertó (:-)), una máquina de Linux.

Así es "Escribe una vez, compila en todas partes", en mi opinión es una combinación de palabras muy bien elegida. De lo contrario, la línea de la etiqueta podría haber sido, "Escribir una vez, compilar para todo".

Volviendo al tema original, ni siquiera necesita diferentes máquinas físicas para cada una de las plataformas de destino, ya que en esta época de buenas soluciones de virtualización puede configurar fácilmente un par de máquinas virtuales y construirle aplicación en diferentes plataformas desde la misma máquina física.

En cuanto a las otras preguntas no respondidas directamente desde su pregunta:

¿Debo instalar Qt Creator en las tres plataformas? Si lo hago, puedo espero poder tomar un proyecto Qt (o tal vez solo el código fuente ) que he desarrollado usando el Creador Qt para, digamos, Windows, copiarlo en mi Mac o Linux máquina, y construirlo allí utilizando la versión de Qt Creador para esa plataforma, sin que se encuentre con algunos problemas importantes?

Sí. Los problemas menores son cosas como conseguir que sus aplicaciones sean ejecutables/iconos binarios directamente en las tres plataformas principales (Windows, Linux, Mac) o la integración avanzada de Mac Dock o la barra de la bandeja Problemas de integración entre los dos. Estos problemas se pueden manejar sin romper la característica de plataforma cruzada de su código, encapsulando adecuadamente el código específico de su plataforma en directivas de compilación como #define para, p. Ej. También recomiendo hacerlo para cada otro código específico de plataforma que requiera su aplicación o si hará un uso extensivo del código específico de la plataforma, separando bloques enteros del código específico de la plataforma relacionada en varias bibliotecas dinámicas cargadas (o bibliotecas compartidas) específicas para cada plataforma pero exportar la misma interfaz genérica abstracta y cargar/vincular a ellos según sea necesario.

Podría ser que incluso la mejor práctica para el uso de Qt para crear ejecutables para mutiple plataformas, frente a la instalación de herramientas de compilación cruzada en un solo anfitrión de desarrollo?

Debe utilizar el SDK de Qt (Qt Creator o las herramientas de línea de comandos) para la construcción de su aplicación siempre que sea posible, ya que las herramientas como qmake tomará la carga de manejar .moc archivos manualmente en su Makefile. Pero si eso se vuelve imposible por varias razones, por ejemplo. como su empresa que impone el desarrollo de Visual Studio (¿plataforma cruzada?), hay muchos tutoriales sobre cómo manejar compilaciones basadas en Qt utilizando sistemas de compilación como MS Visual Studio, GNU autotools o CMake. Aunque recomendaría seguir con qmake, que es un buen generador de "make makefile" y fácilmente adaptable a los hacks específicos de plataforma que pueda necesitar para que su aplicación funcione correctamente, en lugar de usar un sistema de compilación que sea más cómodo para la plataforma específica piratea y luego intenta acomodarse a las necesidades de Qt para esos sistemas de compilación. Después de todo, si desarrolla su aplicación en Qt por razones multiplataforma, entonces Qt debería ser el marco principal para su aplicación y no el API/código específico de la plataforma o las bibliotecas de terceros que pueda utilizar.

Espero haber sido lo suficientemente claro y útil.

PD: También soy bienvenido a sugerencias o correcciones/adiciones con respecto a lo que escribí en los comentarios.

+0

No puedo compilar razonablemente aplicaciones dirigidas a android _on_ android. Este argumento se desmorona para los dispositivos móviles. – Wyatt8740

2

La última vez que estaba usando Qt, y fue hace años, tenías que compilar en cada plataforma para la que querías un binario. Por supuesto que podría compilar de forma cruzada, pero creo que depende de usted configurar tal cosa.

Tal vez alguien más haga una pregunta mejor, pero no creo que te falte nada.

+0

Mejor ** pregunta **? –

2

No sé acerca de los sistemas Linux. Pero para desarrollar la aplicación Qt dirigida a Mac OS X y Windows, necesita una máquina de desarrollo para cada uno de ellos. No hay compilación cruzada para los dos.

Qt es multiplataforma en el sentido de que los mismos archivos fuente pueden crear aplicaciones para diferentes plataformas. Con todas las VM disponibles, una configuración de máquina (física) para desarrollar y construir múltiples objetivos no debería ser demasiado problema. De hecho, así es exactamente como estoy trabajando en mi proyecto actual, que apunta tanto a Mac como a Windows.

+1

Puede realizar una compilación cruzada utilizando mingw32 para Windows desde un host Linux (http://lists.trolltech.com/qt-interest/2006-03/thread00351-0.html). No sé sobre MacOS X. –

3

No creo que haya una configuración de compilación cruzada.

Sobre la portabilidad del proyecto completo, diría "casi" porque encontré algunas fallas técnicas molestas. Sin embargo, su código fuente será 100% portátil y recompilarlo en otra plataforma solo requerirá algunos trucos en .pro.

Lo que hago es trabajar con una sola plataforma (Linux) y de vez en cuando compilar usando mi máquina Windows y mi Mac Mini. Con lo que normalmente termino luchando son solo algunas directivas sobre dónde encontrar bibliotecas externas o incluir archivos. Además, cuando trabajo en Mac, tengo que copiar los archivos externos en el paquete de la aplicación para que el programa pueda encontrarlos.

6

Puede usar MinGW para realizar compilaciones cruzadas en Linux para Windows. La compilación cruzada a Mac no es posible debido a problemas técnicos. No hay una manera fácil de hacerlo desde GUI, pero here es un buen método para compilar QtWebKit para Windows. Eso se puede aplicar a cualquier proyecto de Qt.

1

La compilación cruzada se utiliza generalmente para desarrollar software en un sistema Linux host y compilar para un sistema Linux objetivo. Durante años utilicé un sistema Linux que se ejecuta en un x86 con X11 (KDE) para compilar de forma cruzada nuestra aplicación Qt para un sistema ARM integrado que ejecuta Qt Embedded. Si usa aplicaciones móviles, es probable que compile de forma cruzada. Puede cruzar la compilación en un sistema Windows, por supuesto. Todo lo que realmente necesitas es el compilador cruzado. Como gcc está disponible en el código fuente, los compiladores cruzados de gcc son bastante comunes. Para realizar una compilación cruzada con Qt, necesita una mkspec para qmake que especifique qué compiladores usar.

Su último párrafo indica que probablemente no podrá hacer este tipo de compilación cruzada: puede hacerlo en su máquina Windows para Linux o probablemente para Mac, y probablemente pueda hacerlo en Linux para Windows si está utilizando la versión mingw de Qt en Windows, pero nunca compilará una aplicación basada en el compilador de Microsoft en Linux o Mac para Windows.

Conclusión: haga lo que indique. Obtenga su fuente en cada plataforma de destino y compílela allí.

Cuestiones relacionadas