cómo tener objetivos maquillaje para depuración independiente y liberar directorios de construcción?

StackOverflow https://stackoverflow.com/questions/545780

  •  23-08-2019
  •  | 
  •  

Pregunta

Busco sugerencias para manejar adecuadamente separada de depuración y liberación de construir subdirectorios, en un sistema de archivo make recursivo que utiliza el blanco $ (SUBDIRS) tal como se documenta en el manual para aplicar gnumake realizar los objetivos a los subdirectorios (código fuente).

En concreto, estoy interesado en las posibles estrategias para poner en práctica los objetivos como 'todos', 'limpia', 'realclean', etc. que, o bien asume uno de los árboles o debería funcionar en ambos árboles están causando un problema.

Nuestros archivos make actuales utilizan una variable COMPILETYPE que consigue el sistema de depuración (por defecto) o de salida (el objetivo de 'liberación'), lo que lo hace adecuadamente las compilaciones, pero la limpieza y hacen todo único trabajo en el árbol de depuración por defecto. Al pasar por la variable COMPILETYPE pone torpe, porque si, y cómo hacer esto depende del valor del objetivo real.

¿Fue útil?

Solución

Una opción es tener objetivos específicos en los subdirectorios para cada tipo de construcción. Así que si lo hace un "hacer todo" en el nivel superior, se ve en COMPILETYPE e invoca "hacer todo de depuración" o "hacer todo de liberación", según corresponda.

Como alternativa, se podría establecer una variable de entorno COMPILETYPE en el nivel superior, y tienen cada reparto sub-Makefile con él.

La verdadera solución es no hacer un make recursivo, pero para incluir archivos make en subdirectorios en el archivo de nivel superior. Esto le permitirá construir fácilmente en un directorio diferente al de la fuente vive, lo que puede tener build_debug y build_release directorios. También permite hacer paralelamente al trabajo (hacer -j). Ver recursiva hacer en ellas nocivo para una explicación completa.

Otros consejos

Si es disciplinado en su Makefile sobre el uso de sus $ (COMPILETYPE) variable para hacer referencia al directorio de construcción apropiada en todas sus reglas, a partir de reglas que generan archivos de objetos, la normativa para la limpieza / dist / etc, que debería haber bien.

En un proyecto que he trabajado, tuvimos una variable $ (BUILD) que se ajusta a (el equivalente a) acumulación (COMPILETYPE) que hizo que gobierna un poco más fácil ya que todas las reglas de la misma podría referirse a $ ( CONSTRUIR), por ejemplo, se limpia rm -rf $ (BUILD).

Mientras usted está utilizando $ (MAKE) para invocar sub-marcas (y el uso de GNU make), puede exportar automáticamente la variable COMPILETYPE a todos los sub-hace sin hacer nada especial. Para obtener más información, ver las href="http://www.gnu.org/software/make/manual/make.html#Variables_002fRecursion" GNU Make Manual .

Algunas otras opciones:

  • Fuerza una re-construcción del compilador cuando se cambian, mediante la adición de una dependencia para todos los objetos de un archivo meta que realiza un seguimiento de la última serie de opciones del compilador utilizado. Véase, por ejemplo, cómo Git maneja ficheros objeto .
  • Si está usando autoconf / automake, puede utilizar simplemente una acumulación separada fuera de lugar directorio de construcción para sus diferentes tipos de construcción. por ejemplo, cd /scratch/build/$COMPILETYPE && $srcdir/configure --mode=$COMPILETYPE && make lo que llevaría el tipo de construcción de los Makefile y en configuración (donde habría que añadir un poco de ayuda para especificar sus parámetros deseados de construcción basado en el valor de --mode en su configure.ac)

Si usted le da algunos ejemplos más concretos de sus reglas actuales, tal vez obtendrá algunas sugerencias más concretas.

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