2010-05-22 13 views
11

Recientemente he aprendido cómo utilizar automake, y estoy un poco molesto que mis mandatos de compilación pasaron de un montón de:¿Cómo hacer que el automake sea menos feo?

g++ -O2 -Wall -c fileName.cpp 

Para un montón de:

depbase=`echo src/Unit.o | sed 's|[^/]*$|.deps/&|;s|\.o$||'`;\ 
    g++ -DHAVE_CONFIG_H -I. -I./src  -g -O2 -MT src/Unit.o -MD -MP -MF $depbase.Tpo -c -o src/Unit.o src/Unit.cpp &&\ 
    mv -f $depbase.Tpo $depbase.Po 

¿Hay alguna manera de limpiar esto? Por lo general, puedo elegir fácilmente mensajes de advertencia, pero ahora el muro de texto para leer es 3 veces más grande y mucho más extraño.

Sé cuáles son mis banderas, por lo que es justo decir que "Compilar xxx.cpp" para cada archivo sería perfecto.

Respuesta

18

A partir de automake 1.11, puede limpiar en gran medida la salida utilizando la opción de reglas silenciosas. Por ejemplo:

 
$ # First, make without silent rules 
$ make 
make all-am 
gcc -DHAVE_CONFIG_H -I.  -g -O2 -MT foo.o -MD -MP -MF .deps/foo.Tpo -c -o foo.o foo.c 
mv -f .deps/foo.Tpo .deps/foo.Po 
/bin/sh ./libtool --tag=CC --mode=link gcc -g -O2 -o foo foo.o 
libtool: link: gcc -g -O2 -o foo foo.o 
gcc -DHAVE_CONFIG_H -I.  -g -O2 -MT bar.o -MD -MP -MF .deps/bar.Tpo -c -o bar.o bar.c 
mv -f .deps/bar.Tpo .deps/bar.Po 
/bin/sh ./libtool --tag=CC --mode=link gcc -g -O2 -o bar bar.o 
libtool: link: gcc -g -O2 -o bar bar.o 
gcc -DHAVE_CONFIG_H -I.  -g -O2 -MT baz.o -MD -MP -MF .deps/baz.Tpo -c -o baz.o baz.c 
mv -f .deps/baz.Tpo .deps/baz.Po 
/bin/sh ./libtool --tag=CC --mode=link gcc -g -O2 -o baz baz.o 
libtool: link: gcc -g -O2 -o baz baz.o 
gcc -DHAVE_CONFIG_H -I.  -g -O2 -MT qux.o -MD -MP -MF .deps/qux.Tpo -c -o qux.o qux.c 
mv -f .deps/qux.Tpo .deps/qux.Po 
/bin/sh ./libtool --tag=CC --mode=link gcc -g -O2 -o qux qux.o 
libtool: link: gcc -g -O2 -o qux qux.o 
$ # Now, use the silent rules 
$ ./configure --enable-silent-rules > /dev/null 
$ make clean all 
rm -f foo bar baz qux 
rm -rf .libs _libs 
rm -f *.o 
rm -f *.lo 
make all-am 
    CC  foo.o 
    CCLD  foo 
    CC  bar.o 
    CCLD  bar 
    CC  baz.o 
    CCLD  baz 
    CC  qux.o 
    CCLD  qux 

Todo lo que se necesita es añadir "silent-reglas" para la invocación de AM_INIT_AUTOMAKE en configure.ac, y añadir los --enable-silent-reglas opción cuando se invoca configure. (No fue un gran debate sobre la necesidad de agregar la opción en el momento de la configuración cuando esta característica fue agregada, y es una solución fácil para hacerlo innecesario.) Tenga en cuenta que con reglas silenciosas habilitadas, todavía puede obtener detallado salida ejecutando 'make V = 1'

+6

Parece que todo lo que necesita para que sea el predeterminado es agregar AM_SILENT_RULES ([yes]). Esto es exactamente lo que estaba buscando. –

+1

Gracias; agregar 'AM_SILENT_RULES ([yes])' por sí mismo a 'configure.ac', justo después de la línea' AM_INIT_AUTOMAKE', hizo el truco. Una producción mucho mejor. –

+0

Perdón por necrocommentir aquí ... Tengo el mismo problema que el póster original. Para mí, estaría bien si mi resultado de salida se viera como el ejemplo inicial de "sin reglas silenciosas". Eso parece ser bastante estándar. Pero el mío viene con todo tipo de líneas de sed como OP, especialmente con la variable "depbase". Honestamente, es bastante difícil para los ojos. ¿Hay alguna manera de simplemente limpiar esa parte y dejar los comandos de compilación? –

4

He hecho un poco de google ya que estoy en el mismo bote, las herramientas de autoconf hacen un buen trabajo pero de alguna manera arruina tus ojos cuando pasa el texto y no hay manera de saber de qué se trata ... aquí hay un enlace a un blog que menciona una herramienta para hacer esto y hacer que parezca más limpio al igual que la forma en que se ve la construcción del kernel hace la magia es decir

 
Compiling foo.so 
Linking foo.so 

aquí hay otro enlace a una herramienta que se llama prettify automake .

+0

Ambos enlaces están muertos. –

Cuestiones relacionadas