¿Cómo puedo usar un servidor de compilación con Keil uVision4 (MDK-ARM), crear un script de compilación, usar un makefile?

12

Me gustaría ejecutar compilaciones diarias, o registrar / comprometer compilaciones activadas de proyectos basados en Keil MDK-ARM. Hasta ahora he logrado que las cosas funcionen con la función de archivo por lotes del IDE. Esto requiere que genere el proyecto al menos una vez con el IDE, luego registre el archivo por lotes y los archivos asociados .__i y ._ia creados por el IDE.

Además, el IDE pone muchas cosas específicas del usuario en el archivo por lotes como la variable PATH de Windows. Esto podría convertirse en un problema con varios desarrolladores, ya que el archivo por lotes para la construcción podría cambiarse en cada confirmación de un desarrollador diferente.

En última instancia, solo necesitas hacer un seguimiento de los distintos interruptores de armcc , armasm y ArmLink .

¿Hay una manera de usar un makefile más estándar para construir proyectos de uVision de Keil? ¿Existe algún método para traducir un archivo de proyecto de uVision en un script de compilación más mantenible?

    
pregunta rmaVT

2 respuestas

8

Este es el mejor método que he encontrado recientemente:

En las opciones de compilación, seleccione crear archivo por lotes.

Cuando inicia una compilación desde el IDE, se crean un archivo por lotes junto con varios archivos de texto según las opciones establecidas en el IDE. Debe realizar un seguimiento de estos archivos generados por IDE en el control de origen:

  • * .bat
  • * .ini
  • * .__ i
  • * ._ ia
  • * .lnp
  • * .sct

Entonces foo.bat se puede iniciar desde un script de compilación.

Si bien esto crea archivos adicionales que deben rastrearse en el control de origen si desea compilar de manera confiable a partir del archivo por lotes generado, elimina la necesidad de confiar en el archivo de proyecto Keil (foo.uvproj) y el IDE. Me resulta más fácil comparar las diferencias y, por lo tanto, hacer un seguimiento de los cambios a los archivos de texto generados (* .__ i) que contienen marcas de compilación que al archivo .uvproj. Además, el archivo por lotes llama a las diversas herramientas, armasm, armcc, armlink, directamente. Esto le brinda el resultado directo de cada uno de esos pasos, así como un potencial aparentemente mejor para migrar un proyecto a una cadena de herramientas diferente en el futuro, si es necesario.

Me doy cuenta de que esta respuesta se parece mucho a mi pregunta original, pero realmente no conozco una mejor manera de ejecutar una compilación con scripts con las herramientas de Keil. Pedí ver lo que podría surgir de los demás. No estoy totalmente en desacuerdo con la respuesta de @digikata, pero prefiero tener indicadores de compilación y el mapa de memoria en un formato más fácil para el seguimiento y usar más herramientas de estilo Unix para compilar en lugar de lanzar una compilación todo en uno. con el IDE. Creo que la compilación todo en uno del IDE funciona bien en mi estación de trabajo, pero no para el servidor de compilación.

EDIT : el servidor de compilación se ejecuta en Windows Server 2003. Debo confesar que he cedido a usar la interfaz de línea de comandos IDE en lugar de un archivo por lotes. Esto se volvió demasiado difícil de manejar.

    
respondido por el rmaVT
3

Llamo al IDE de Keil a través de la línea de comandos para compilar (no un archivo por lotes generado) desde un Makefile. Por lo general, resulta mejor bloquear los archivos del proyecto a través del scm o tomar una copia de compilación de referencia que cambie el nombre de los nombres del proyecto relevante al hacer esto.

El IDE está perfectamente contento de trabajar con archivos de proyectos de solo lectura, por lo que si los bloquea, lo irritante es que debe desbloquearlos para cambiar la configuración, guardar y volver a registrarlos. Si está en un punto bastante estable en el proyecto es bastante pequeño, incluso deseable.

Si toma una copia de referencia, entonces la compilación tiende a romperse a medida que cambian las configuraciones del proyecto, especialmente cuando se agregan o eliminan archivos de proyecto de la compilación. Capturar explícitamente esos cambios no es necesariamente malo, pero es un paso adicional necesario para mantener las compilaciones.

De cualquier manera, redirigir la salida a un archivo de registro a través de la opción "-o" le permite acceder al registro de salida completo. El registro no sale de una línea a la vez, pero parece que todo está allí. (De hecho, analizo el formato de error de Keil a GNU fmt para integrarlo con el entorno CDT de Eclipse. Esto me permite saltar directamente a errores / advertencias después de la compilación)

La compilación de la línea de comandos también genera los archivos __i, __ia, por lo que tampoco es necesario que entren en el control de versiones para el servidor de compilación.

Espero que esto ayude.

    
respondido por el Digikata

Lea otras preguntas en las etiquetas