2010-03-10 11 views
7

¿Hay alguna manera de registrar los comandos, hacer invocaciones para compilar un programa? Sé de los parámetros -n y -p, pero o bien no resuelven las condiciones de if sino que simplemente las imprimen. O no funcionan, cuando hay llamadas a 'make' en el Makefile.Comandos de inicio de sesión de make

Respuesta

1

Puede encontrar lo que está buscando en los registros de construcción anotados producidos por SparkBuild. Eso incluye los comandos de cada regla ejecutada en la construcción, ya sea que se haya utilizado o no "@" para evitar que la impresión de la línea de comando.

Su comentario sobre if-conditions es un poco confuso: ¿está hablando de construcciones de shell o construcciones? Si te refieres a construcciones de caparazón, no creo que haya ninguna forma de que obtengas exactamente lo que buscas, excepto al utilizar strace como otros describieron. Si quiere decir construir, entonces la salida que ve es el resultado de la expresión condicional resuelta.

+0

Parecen ser construcciones de concha.Pero no sé por qué alguien quiere usar construcciones de shell en Makefiles, cuando puede usar los constructos de Makefile. ¿Son mejores de alguna manera? – Customizer

+0

I SparkBuild se ve interesante. Definitivamente voy a investigar esto. – Customizer

+1

La cuestión de las construcciones de shell versus las construcciones depende de lo que estás tratando de hacer. Por un lado, hay cosas que puedes hacer con las construcciones de shell que no puedes hacer con make constructs, como probar que un archivo sea legible o ejecutable. Por otro lado, se evalúan en diferentes momentos con respecto a los otros comandos en el cuerpo de la regla: las construcciones make se evalúan antes de que se ejecuten realmente los comandos, pero las construcciones del armazón se evaluarán in situ a medida que se ejecutan los comandos. –

0

¿Has probado con el parámetro -d (depuración)?

Tenga en cuenta que puede controlar la cantidad de información con --debug en su lugar. Por ejemplo, --debug = a (igual que -d), o --debug = b para mostrar solamente informaciones básicas ...

+0

Sin olvidar redirigir stdout a un archivo, make -d produce mucha información muy rápidamente. –

1

Se podría tratar de conectarse con execve llamadas strace

strace -f -e execve make ... 
+0

Esa es una buena herramienta. No había oído hablar de eso todavía. Pero produce mucho rendimiento, no lo necesito en este caso. – Customizer

+0

Strace es una herramienta para rastrear todas las llamadas al sistema (en mi ejemplo limitado a execv), así que sí probablemente le dará más del mínimo que está buscando (específicamente imprimirá todos los intentos (fallidos) para ejecutar un comando desde todos los directorios $ PATH). – hlovdal

2

Hacer escribe cada comando que se ejecuta en la consola, por lo

make 2>&1 | tee build.log 

va a crear un archivo de registro denominado build.log como un efecto secundario que contiene el mismo material escrito en la pantalla. (man tee para más detalles.)

2>&1 combina salida estándar y errores en una secuencia. Si no incluyó eso, la salida regular entraría en el archivo de registro pero los errores solo irían a la consola. (make sólo escribe en stderr cuando un comando devuelve un código de error.)

Si desea suprimir la salida del todo a favor de registro en un archivo, que es aún más simple:

make 2>&1 > build.log 

Debido a que estos sólo captan la consola salida funcionan bien con recursivo make.

+0

Los comandos que tienen el prefijo @ (ejecución silenciosa) no están incluidos en este registro, desafortunadamente. –

7

Este

make SHELL="sh -x" 

hará que la cáscara (que hacen que invoca para evaluar las construcciones shell) para imprimir la información acerca de lo que está haciendo, que le permite ver cómo se están evaluando los condicionales en los comandos de la shell.

+0

Esta es una respuesta útil – tonylo

Cuestiones relacionadas