Pregunta

Tengo un proyecto C muy grande con muchos archivos y encabezados C separados y muchas docenas de contribuyentes. Muchos contribuyentes no tienen un gran conocimiento de los archivos MAKE y las dependencias, lo que resulta en un problema común en el que casi siempre tiene que & Quot; make clean & Quot; antes de que puedas confiar en " make " haber producido la salida correcta.

Si make tomó minutos, esto no sería un problema, pero ahora son casi 2 horas en una máquina rápida, y la gente está comenzando a registrar el código que funciona cuando lo hacen, pero no limpian primero y su El código finalmente rompe la compilación. No pregunte por qué el administrador de compilación no los detecta antes de que se corte una nueva línea de base ...

Sí, no deberíamos haberlo dejado llegar tan lejos.

Sí, estamos educando a nuestros desarrolladores.

Como de costumbre, no tenemos tiempo para detener todo y arreglarlo a mano.

Creo que hay herramientas en este sentido:

  • ¿Existen herramientas automatizadas para ayudar a construir información de dependencia correcta para un proyecto existente a partir de los archivos C y H?
  • ¿Existen herramientas automatizadas para describir la información de dependencia de acuerdo con los makefiles?
  • ¿Existe alguna herramienta sagrada para describir las diferencias entre los dos árboles de dependencia anteriores?

¿Pero qué más se puede / se debe hacer para resolver este problema?

Gracias de antemano ...

-Adam

¿Fue útil?

Solución

Puede ser más fácil cambiar de Make a una herramienta que detecta dependencias automáticamente. Por ejemplo, SCons no hace que enumere las dependencias, sino que analiza automáticamente los archivos que se compilan y busca incluir . Simplemente especifique qué archivos deben compilarse y qué archivos van a qué ejecutables. Cambiar los sistemas de compilación será más fácil por el hecho de que sus desarrolladores no son realmente expertos.

Otra alternativa si te quedas con Make es usar la opción gcc -M para detectar dependencias automáticamente. La respuesta a la Descubrimiento automático de dependencias C tiene un ejemplo de cómo hacer que sus archivos Makefile descubran automáticamente dependencias para que no necesite especificarlas a mano.

Otros consejos

Tenemos el mismo problema en mi lugar de trabajo. El tronco siempre se rompió después de fusiones o registros.

Configuramos una máquina de compilación de interacción continua que realiza una limpieza en aproximadamente 45 minutos en comparación con aproximadamente 2 horas en una máquina de desarrollo. El servidor de integración sondea el repositorio SVN cada 2 horas para nuevos registros y comienza una limpieza.

De esa manera, podemos monitorear exactamente cuándo se rompió la compilación y solucionarlo de inmediato. Utilizamos Hudson como nuestro servidor de integración continua, es gratuito y de código abierto, es una obra de arte y muy fácil. para configurar Además, la interfaz de usuario es muy intuitiva, a todos los demás desarrolladores les encanta.

Saludos,

La forma canónica de resolver esto es dejar que el compilador genere automáticamente información de dependencia para usted. Algo como esto (suponiendo que gcc, querrá verificar su compilador para opciones similares)

SOURCES=foo.c bar.c

%.d: %.c
    $(CC) $(CFLAGS) -MM $< >$@ 

include $(SOURCES:.c=.d)

El manual GNU Make tiene un capítulo sobre generación automática de requisitos previos .

EDITAR: por lo general, recomiendo a las personas que empiecen a usar CMake cuando tienen este tipo de problema.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top