Usando CMake con GNU Make: ¿Cómo puedo ver los comandos exactos?


281

Uso CMake con GNU Make y me gustaría ver todos los comandos exactamente (por ejemplo, cómo se ejecuta el compilador, todos los indicadores, etc.).

GNU make tiene --debug, pero no parece ser tan útil ¿hay alguna otra opción? ¿CMake proporciona indicadores adicionales en el Makefile generado para fines de depuración?


2
O, para agregar algunos términos de búsqueda, Cómo ocultar líneas de comando completas, detalladas y ejecutadas, y mostrar solo resultados de color porcentuales silenciosos.
— ulidtko


mkdir build; cd build; cmake .. --debug-output; make VERBOSE=1
— parroquial

Respuestas:


369

Cuando ejecute make, agregue VERBOSE=1para ver el resultado completo del comando. Por ejemplo:

cmake .
make VERBOSE=1

O puede agregar -DCMAKE_VERBOSE_MAKEFILE:BOOL=ONal comando cmake para obtener un resultado detallado del comando detallado de los Makefiles generados.

cmake -DCMAKE_VERBOSE_MAKEFILE:BOOL=ON .
make

Para reducir algunos resultados posiblemente menos interesantes, puede utilizar las siguientes opciones. La opción CMAKE_RULE_MESSAGES=OFFelimina líneas como [33%] Building C object ... , mientras que --no-print-directoryle dice a make que no imprima el directorio actual filtrando líneas como make[1]: Entering directoryy make[1]: Leaving directory.

cmake -DCMAKE_RULE_MESSAGES:BOOL=OFF -DCMAKE_VERBOSE_MAKEFILE:BOOL=ON .
make --no-print-directory

12
Estas soluciones lo hacen demasiado detallado, imprimen mucho CMake y crean elementos internos que no son interesantes. ¿Hay alguna manera de mostrar solo los comandos de compilación y enlace (es decir, lo que suele ser relevante para los problemas de depuración)? Quizás incluso solo muestre el comando que falló.
— Tronic

Google Hit recomienda "si desea ver únicamente las líneas de comando de g ++, debe usar grep & Co., si es posible, en relación con Makefiles detallados" . Quizás los desarrolladores con mucha experiencia en cmake tengan otros consejos.
— Trevor Boyd Smith

77
Por cierto, si está en una plataforma que lo admite, cmake -GNinja . ; ninja -vmuestra una salida detallada muy agradable con un mínimo de pelusa.
— richq

11
Línea única ...cmake --build . -- VERBOSE=1
— letmaik

Aparentemente, debo estar trabajando con una versión más nueva de cmake, porque no se encontraron archivos make en mi directorio de compilación después de ejecutar cmake ...
— DrumM

80

Es conveniente configurar la opción en el CMakeLists.txtarchivo como:

set(CMAKE_VERBOSE_MAKEFILE ON)

3
Por favor, no hagas esto para tus propios proyectos. No todos sus usuarios pueden querer ver su salida de compilación detallada. No fuerce esto a todos los que consuman su biblioteca. CMAKE_VERBOSE_MAKEFILE debe estar desactivado por defecto y la elección del usuario, si lo necesita, para fines de depuración.
— Ela782

3
¿Entonces? Siempre puede agregarlo como una variable de caché si tiene varios desarrolladores y desea darles una opción. Pero sí, en una versión de lanzamiento de un proyecto, debería desactivarlo de forma predeterminada.
— James Hirschorn

1
Esta es una gran opción cuando se usa qt.io QtCreator porque la GUI llama a cmake. ¡Gracias!
— Grant Rostig

9

O simplemente exporte la variable de entorno VERBOSE en el shell de esta manera: export VERBOSE=1


8

Si usa la GUI CMake, cambie a la vista avanzada y luego la opción se llama CMAKE_VERBOSE_MAKEFILE.


¿Cómo puedo configurar esta opción en archivos de texto, sin usar GUI?
— osgx

4

Estaba intentando algo similar para asegurarme de que la -ggdbbandera estuviera presente.

Llame a make en un directorio limpio y seleccione la bandera que está buscando. Buscando en debuglugar de ggdbsimplemente escribir.

make VERBOSE=1 | grep debug

La -ggdbbandera era lo suficientemente oscura como para que solo aparecieran los comandos de compilación.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.