2012-03-28 12 views
7

Tenemos una base de código compleja de C++ que apunta a múltiples plataformas móviles. Actualmente tenemos Windows CE (4.2 a 6.5 CE tanto cruda y móvil basado en aquellos), Android (2.1 o superior), iPhone (4+), casi trabajar Bada (2.0+) y si algo viene de la nueva cosa de C++/CX, es probable que agregue Windows Phone (8+). Además de una versión de prueba en Win32 y aplicación de servicio en Win64 que comparte algún código. También hemos intentado compilar pruebas unitarias en Linux y ya se han formulado preguntas (volumen de negocios muy pequeño hasta ahora, pero eso podría cambiar) para que funcione en algunas otras plataformas Linux.Herramientas de compilación para múltiples plataformas móviles

Actualmente compilamos el código con herramientas nativas para cada plataforma. Cada uno de ellos es bastante complejo y tiene algunos hacks dentro o fuera de él para lograr compilaciones razonablemente de un solo clic. Y para Bada, aún no resolvimos las construcciones fuera del Eclipse con ajustes de Samsung, lo que tendremos que hacer para la producción.

Hasta ahora funciona, pero cada vez es más un problema de mantenimiento. El mayor problema actualmente es la compilación de iPhone, porque a diferencia de los archivos de proyecto de Visual Studio y los archivos make simples, no es posible agregar/eliminar/renombrar archivos en el proyecto XCode a mano y solo dos personas tienen MacOS boxen y cualquier experiencia con XCode (mientras todos tienen Windows y conoce Visual Studio). También necesitamos crear algunos makefiles para el objetivo Bada (es simple cadena de herramientas de GNU, por lo que cualquier cosa capaz de compilar cruzado con ellos debería hacerlo) y no me gustaría deshacerme de algunos de los kludges en la compilación de Android: corregir errores en manejo de dependencia cuando se construye bajo cygwin, algunos hacks en la parte superior del script de construcción de ant y cola de shell para masajear manifiesto y mantenerlo todo junto.

Así que estoy buscando consejos sobre cómo unificar el proceso de compilación para este conjunto de diversas plataformas.

  • Es absolutamente tiene que manejar la construcción de los ejecutables de iPhone y Bada y la parte natural de la compilación de Android (porque nadie tiene las tres plataformas para probar por separado).
  • Tiene que manejar un gran proyecto que consiste en varias bibliotecas compartidas, un binario principal, un binario de prueba para las mismas plataformas y algunos binarios auxiliares construidos solo en algunas plataformas (bueno, actualmente solo en Win32).
  • Tiene que ser capaz de generar encabezado de configuración de compilación y archivo Java con la versión del sistema de control de versiones y algunas variables definidas por el usuario, ya que hacemos 18 y contamos compilaciones ligeramente diferentes para varios clientes.
  • Y, por supuesto, tiene que manejar automáticamente las dependencias (archivos de encabezado) y en general ser confiable.

Para las otras cosas que estoy preparado para cortar alrededor cualquier deficiencia, pero obviamente me gustaría mantener la cantidad de cinta adhesiva concha y escupir al mínimo, por lo que debe:

  • Ser capaz de integre lo suficiente con Visual Studio, Eclipse y XCode para que cada entorno pueda desencadenar la compilación, cargue el producto de compilación en el destino correspondiente y adjunte el depurador allí.
  • Ser capaz de construir Java y llamar a las herramientas de empaquetado personalizadas para Android, para no tener que hackear el script de compilación de hormigas que Google cambió innecesaria e incompatiblemente dos veces en los últimos dos años (y el antiguo SDK no puede descargado).
  • Ser capaz de instalar varios archivos de datos y llamar a los empaquetadores aleatorios y al azar a otros scripts y herramientas y demás, por lo que no tiene que mezclarse con demasiados script de shell.

Hasta ahora hemos empezado a tratar CMake (no tengo mucho tiempo, así que no tuvimos mucho, pero tendrá que hacer algo en breve) y también pensado SCons. Sin embargo, ya he intentado construir con SCons para Windows CE hace algunos años, pero dado que genera proyectos tipo maqueta para Visual Studio y aquellos que no funcionaron para plataformas integradas en VS2005, me rendí. CMake puede generar makefiles nativos, pero se necesita custom, bit out of date, branch para CE. Así que me gustaría preguntar si hay otras herramientas que podamos examinar o algún obstáculo conocido con estas herramientas de las que deberíamos estar al tanto.

actualizaciones: que he encontrado instrucciones para android binarios nativos en varios lugares y pixellight incluso tiene guión cmake para generar apk llamando directamente a las herramientas de empaquetado. También this shell script lo muestra. iPhone usage parece estar documentado aquí.

+0

Eche un vistazo a vs Android (http://code.google.com/p/vs-android/) – Asaf

+0

@Asaf: Gracias, pero todavía estamos atrapados con VS2008 y la actualización ahora no parece valer la pena el dinero. Y no nos ayudaría con el iPhone, porque VS no funciona en MacOS y nunca escuché sobre el compilador de direcciones de iPhone que funcionaría en Windows. –

+0

¿No es la caja mac a * nix ahora, no puede renunciar a construir con VS y usar otro compilador de C++? Puede que tengas que ajustar tu código para que sea más ansi, pero esa es la mejor práctica de todos modos. – baash05

Respuesta

4

Los mismos archivos de compilación CMake se pueden usar para generar y crear proyectos en plataformas para al menos Win32 (VS2005), Linux (ubuntu) y OS X (10.5.8 Leopard), en mi experiencia personal. Existen múltiples proyectos para usar CMake en el proceso de compilación de la aplicación de Android, por ejemplo, http://code.google.com/p/android-cmake/. Con todas estas opciones, consideraría a CMake como una buena opción. Además, CMake es fácil de recuperar, y aún más fácil si tiene experiencia previa con la escritura de archivos configure.ac y Makefile.ac.

Nota: ¿Cómo funciona CMake:

  1. desarrollador/Mantenedor crea CMakefile.
  2. Builder ejecuta cmake, que utiliza el CMakefile para generar archivos de compilación específicos de la plataforma. (Archivos makefiles de Linux/archivos make de OSX/VS)
  3. Builder activa el comando de compilación.
+0

Tenga en cuenta que para la compilación cruzada necesitará un archivo de cadena de herramientas que introduzca CMake en el entorno de compilación cruzada, consulte la [Wiki de CMake] (http://www.cmake.org/Wiki/CMake_Cross_Compiling). Hay el [ios-cmake] (http://code.google.com/p/ios-cmake) y el [android-cmake] (http://code.google.com/p/android-cmake/) proyectos, proporcionando archivos toolchain para iOS y Android, respectivamente. –

2

CMake es la mejor elección. Comenzando con CMake 2.8.11 Windows CE se admite de fábrica. Hasta el lanzamiento de esa versión, se puede usar un Nightly Binary de CMake.

+0

Gracias. Tendré que mirar; actualmente estamos usando una rama obtenida de http://gitorious.org/~paroga/cmake/parogas-cmake.git, que se basa en 2.8.3. –

+0

Actualmente tengo un pequeño problema con él.Asume que ARM es siempre ARMV4I y por lo tanto debe establecer '/ MACHINE: THUMB', pero aún estamos compilando para' Pocket PC 2003 (ARMV4) 'que debería tener'/MACHINE: ARM'. –

+0

Debo señalar que el problema es trivial; el indicador/MACHINE solo aparece en el CMAKE _ * _ LINKER_FLAGS y también tuve que hacer algunos ajustes en la versión anterior. –

Cuestiones relacionadas