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.cppmake --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?