para con compilar compilador comandos comando gcc makefile verbosity

con - ¿Cómo fuerzo a make/gcc para que me muestre los comandos?



compilar en cmd con gcc (7)

Dependiendo de su versión automake, también puede usar esto:

make AM_DEFAULT_VERBOSITY=1

Referencia: https://lists.gnu.org/archive/html/bug-autoconf/2012-01/msg00007.html

Nota: Agregué esta respuesta ya que V=1 no funcionó para mí.

Estoy tratando de depurar un problema de compilación, pero parece que no puedo obtener GCC (o tal vez es make?) Para mostrarme los comandos reales del compilador y el enlazador que está ejecutando. Aquí está la salida que estoy viendo:

CCLD libvirt_parthelper libvirt_parthelper-parthelper.o: In function `main'': /root/qemu-build/libvirt-0.9.0/src/storage/parthelper.c:102: undefined reference to `ped_device_get'' /root/qemu-build/libvirt-0.9.0/src/storage/parthelper.c:116: undefined reference to `ped_disk_new'' /root/qemu-build/libvirt-0.9.0/src/storage/parthelper.c:122: undefined reference to `ped_disk_next_partition'' /root/qemu-build/libvirt-0.9.0/src/storage/parthelper.c:172: undefined reference to `ped_disk_next_partition'' /root/qemu-build/libvirt-0.9.0/src/storage/parthelper.c:172: undefined reference to `ped_disk_next_partition'' collect2: ld returned 1 exit status make[3]: *** [libvirt_parthelper] Error 1

Lo que quiero ver debería ser similar a esto:

$ make gcc -Wall -c -o main.o main.c gcc -Wall -c -o hello_fn.o hello_fn.c gcc main.o hello_fn.o -o main

Observe cómo este ejemplo muestra el comando gcc completo. El ejemplo anterior simplemente muestra cosas como "CCLD libvirt_parthelper". No estoy seguro de cómo controlar este comportamiento.


Desde la versión 4.0 de GNU Make, el argumento --trace es una buena forma de decir qué y por qué hace un makefile, generando líneas como:

makefile:8: target ''foo.o'' does not exist

o

makefile:12: update target ''foo'' due to: bar


Los archivos make de la biblioteca, que son generados por autotools (el ./configure que debe emitir) a menudo tienen una opción detallada, así que básicamente, usar make VERBOSE=1 o make V=1 debería darle los comandos completos.

Pero esto depende de cómo se generó el makefile.

La opción -d puede ayudar pero le dará una salida extremadamente larga.


Me gusta usar:

make --debug=j

Muestra los comandos que ejecuta:

https://linux.die.net/man/1/make

--debug [= FLAGS] Imprime información de depuración además del procesamiento normal. Si se omiten los FLAGS, entonces el comportamiento es el mismo que si se especificara -d. FLAGS puede ser para todos los resultados de depuración (igual que usar -d), b para depuración básica, v para depuración básica más detallada, i para mostrar reglas implícitas, j para detalles sobre la invocación de comandos y m para depurar al rehacer archivos MAKE.


Para invocar un recorrido en seco :

make -n

Esto mostrará lo que la make está intentando hacer.


Usa make V=1

Otras sugerencias aquí:

  • make VERBOSE=1 - no funcionó al menos desde mis pruebas.
  • make -n - muestra solo la operación lógica, no la línea de comandos que se está ejecutando. Por ejemplo, CC source.cpp

  • make --debug=j - también funciona, pero también puede habilitar la creación de subprocesos múltiples, lo que provoca una salida extra.


Método independiente del sistema de construcción

make SHELL=''sh -x''

Es otra opción. Muestra de Makefile :

a: @echo a

Salida:

+ echo a a

Esto establece la variable SHELL especial para make , y -x le dice a sh que imprima la línea expandida antes de ejecutarla.

Una ventaja sobre -n es que en realidad ejecuta los comandos. He encontrado que para algunos proyectos (por ejemplo, kernel de Linux) que -n puede dejar de ejecutarse mucho antes de lo habitual, probablemente debido a problemas de dependencia.

Una desventaja de este método es que debe asegurarse de que el shell que se usará sea sh , que es el predeterminado que utiliza Make, ya que es POSIX, pero que se puede cambiar con la variable make de SHELL .

Hacer sh -v sería genial, pero Dash 0.5.7 (Ubuntu 14.04 sh ) ignora los comandos -c (que parece ser la forma en que make usa), por lo que no hace nada.

make -p también te interesará, que imprime los valores de las variables establecidas.

CMake genera makefiles

make VERBOSE=1

Consulte: Uso de CMake con GNU Make: ¿Cómo puedo ver los comandos exactos?