Puede que necesites depurar tu construcción de CMake, o depurar tu código C++. Ambos están cubiertos aquí.
Depuración de CMake
Primero, vamos a ver las formas de depurar un CMakeLists u otro archivo CMake.¡
Impresión de variables
El método de honor de las declaraciones de impresión se ve así en CMake:
message(STATUS "MY_VARIABLE=${MY_VARIABLE}")
Sin embargo, un módulo incorporado hace esto aún más fácil:
include(CMakePrintHelpers)cmake_print_variables(MY_VARIABLE)
Si desea imprimir una propiedad, esto es mucho, mucho mejor! En lugar de obtener las propiedades una por una de cada objetivo (u otro elemento con propiedades, como SOURCES
, DIRECTORIES
, TESTS
, o CACHE_ENTRIES
– las propiedades globales parecen faltar por alguna razón), simplemente puede enumerarlas y hacer que se impriman directamente:
cmake_print_properties( TARGETS my_target PROPERTIES POSITION_INDEPENDENT_CODE)
Rastrear una ejecución
¿Ha querido ver exactamente lo que sucede en su archivo CMake, y cuándo? La función --trace-source="filename"
es fantástica. Cada línea que se ejecuta en el archivo que le das se hará eco en la pantalla cuando se ejecuta, lo que le permite seguir exactamente lo que está sucediendo. Hay opciones relacionadas también, pero tienden a enterrarte en la salida.
Por ejemplo:
cmake -S . -B build --trace-source=CMakeLists.txt
Si añades --trace-expand
, las variables se expandirán en sus valores.
Construyendo en modo de depuración
Para generadores de configuración simple, puedes construir tu código con -DCMAKE_BUILD_TYPE=Debug
para obtener banderas de depuración. En los generadores de configuración múltiple, como muchos IDEs, puedes elegir la configuración en el IDE. Hay banderas distintas para este modo (variables que terminan en _DEBUG
a diferencia de _RELEASE
), así como un valor de expresión del generador CONFIG:Debug
o CONFIG:Release
.
Una vez que haga una construcción de depuración, puede ejecutar un depurador, como gdb o lldb en él.