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 gcccomando completo . El ejemplo anterior simplemente muestra cosas como "CCLD libvirt_parthelper". No estoy seguro de cómo controlar este comportamiento.

gcccomando?make V=1.Respuestas:
Para invocar una ejecución en seco :
Esto mostrará lo que
makeestá intentando hacer.fuente
make -nno ejecuta los comandos. Así respuesta correcta esmake V=1make V=1solo funciona si el Makefile lo admite. Los makefiles de automake hacen eso, pero muchos otros no.make VERBOSE=1; para autotools GNUmake V=1.make SHELL='sh -x': stackoverflow.com/a/32010960/895245Los archivos MAKE de la biblioteca, que son generados por autotools (el
./configureque tiene que emitir) a menudo tienen una opción detallada, por lo que básicamente, usarmake VERBOSE=1omake V=1debería darle los comandos completos.Pero esto depende de cómo se generó el archivo MAKE.
La
-dopción puede ayudar, pero le dará una salida extremadamente larga.fuente
VERBOSE=1, noV=1.Construir método independiente del sistema
Es otra opción. Muestra
Makefile:Salida:
Esto establece la
SHELLvariable especial paramakey-xle indicashque imprima la línea expandida antes de ejecutarla.Una ventaja sobre
-nes que realmente ejecuta los comandos. He encontrado que para algunos proyectos (por ejemplo, el kernel de Linux) que-npuede 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 utilizará sea
sh, que es el predeterminado que utiliza Make, ya que son POSIX, pero podría modificarse con laSHELLvariable make.Hacerlo también
sh -vsería genial, pero Dash 0.5.7 (Ubuntu 14.04sh) ignora los-ccomandos (que parece ser cómo lomakeusa), por lo que no hace nada.make -ptambién le interesará, lo que imprime los valores de las variables establecidas.CMake generó Makefiles
Ver: Uso de CMake con GNU Make: ¿Cómo puedo ver los comandos exactos?
fuente
SHELL='$$SHELL -x'hará$SHELLliteral lo que no se evalúa. Usarmake SHELL="$SHELL -x"funcionará.Desde GNU Make versión 4.0, el
--traceargumento es una buena manera de decir qué y por qué hace un archivo MAKE, generando líneas como:o
fuente
Utilizar
make V=1Otras sugerencias aquí:
make VERBOSE=1- No funcionó al menos desde mis ensayos.make -n- muestra solo la operación lógica, no la línea de comando que se está ejecutando. P.ejCC source.cppmake --debug=j- también funciona, pero también puede habilitar la construcción de subprocesos múltiples, lo que genera un rendimiento adicionalfuente
make VERBOSE=1es para CMake. Sus pruebas fueron más probables con proyectos basados en herramientas automáticas GNU.Me gusta usar:
Muestra los comandos que ejecuta:
https://linux.die.net/man/1/make
--debug [= BANDERAS]
Imprima información de depuración además del procesamiento normal. Si se omiten las BANDERAS, el comportamiento es el mismo que si
-dse especificara. Las BANDERAS pueden ser para todas las salidas de depuración (lo mismo que usar-d),bpara la depuración básica,vpara una depuración básica más detallada,ipara mostrar reglas implícitas,jpara detalles sobre la invocación de comandos ympara la depuración mientras se rehacen los archivos MAKE.fuente
Dependiendo de su versión de automake, también puede usar esto:
Referencia: AM_DEFAULT_VERBOSITY
Nota: agregué esta respuesta ya
V=1que no funcionó para mí.fuente