¿Cómo depuro archivos CMakeLists.txt?

Respuestas:

62

No hay ningún depurador interactivo para CMake, sin embargo también hay las banderas -Wdev, --debug-outputy --traceque ayudan a la fuerza. También recuerde verificar los archivos de registro CMakeFiles\CMakeOutput.logy CMakeFiles\CMakeError.logque recopilan principalmente salidas de procesos llamados por CMake (por ejemplo, al verificar la presencia de un tipo o encabezado).

Desde la versión 3.7 , CMake ahora admite oficialmente un "modo servidor", por lo que es probable que la integración en IDE mejore en un futuro próximo. El soporte inicial existe tanto en Qt Creator como en Visual Studio 2017 RC

Joe
fuente
¿En cuál usamos para depurar ifdeclaraciones CmakeList.txt? came --debug ...y cmake --debug-output ...no los está imprimiendo. En Bash, el equivalente es bash -x <cmd>.
jww
@jww No estoy 100% seguro de lo que está intentando depurar, pero el resultado de --tracesuele ser bastante extenso (¡redirigir el resultado a un archivo!)
Joe
Estaba tratando de depurar el script y entender por qué no se estaban ingresando ciertos bloques de código. Pero encontré el problema: string(STRIP ...)estaba roto. También vea ¿Cómo eliminar la nueva línea final en la variable Cmake? . Mis disculpas si no sabías lo que bash -xhace.
jww
No debe mencionar simplemente verificar los registros. Debe explicar cómo se revisan los registros.
Thomas Jay Rush
@ThomasJayRush Agregué información sobre la ubicación y el contenido de los archivos de registro. Cualquier cosa más allá de eso depende del problema específico.
Joe
7

Puede intentar utilizar el nuevo depurador de secuencias de comandos de CMake proporcionado por la herramienta VisualGDB . Utiliza una bifurcación de código abierto de CMake que admite recorrer archivos CMakeLists.txt, establecer puntos de interrupción de código / datos, evaluar / cambiar variables, etc.

Hay un tutorial detallado paso a paso en el nuevo depurador aquí

Ivan Shcherbakov
fuente
5

Hay herramientas CMake Daemon de steveire . No los he usado yo mismo, pero afirman ofrecer posibilidades de introspección que parecen estar bastante cerca de un depurador.

Editar : ahora se llaman CMake-server y son parte de CMake 3.7.

usr1234567
fuente
3

Me gusta usar variable_watch para "depurar" mis archivos CMakeLists.txt. Solo coloque en la parte superior de mi guión:

variable_watch(SOME_MY_VAR)
leanid.chaika
fuente
2

Además, lea sobre env var VERBOSE: https://cmake.org/cmake/help/latest/envvar/VERBOSE.html

Lo usé de esta manera:

export VERBOSE=defined
make

y consiguió un poco más de verbosidad.

En otros casos, edite el CMakeLists.txtarchivo para incluir la siguiente línea:

set(CMAKE_VERBOSE_MAKEFILE ON)

(Alguna publicación sobre esto es https://bytefreaks.net/programming-2/make-building-with-cmake-verbose ).

Además, hay cmakeopciones útiles que controlan la salida de depuración, consulte la página de manual: https://cmake.org/cmake/help/latest/manual/cmake.1.html

Eugene Gr. Philippov
fuente