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?

Nils
fuente
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
Superconjunto no CMake: stackoverflow.com/questions/5820303/…
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功
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
richq
fuente
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)
James Hirschorn
fuente
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

makerj
fuente
8

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

SteveL
fuente
¿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.

Alexander Griffith
fuente