Du har måske brug for at fejlfinde din CMake-bygning eller fejlfinde din C++-kode. Begge dele er dækket her.
CMake debugging
Først skal vi se på måder at debugge en CMakeLists eller en anden CMake-fil på.
Udskrivning af variabler
Den hæderkronede metode med print statements ser således ud i CMake:
message(STATUS "MY_VARIABLE=${MY_VARIABLE}")
Men et indbygget modul gør dette endnu nemmere:
include(CMakePrintHelpers)cmake_print_variables(MY_VARIABLE)
Hvis du vil udskrive en egenskab, er dette meget, meget pænere! I stedet for at få egenskaberne en efter en af hvert target (eller andet element med egenskaber, såsom SOURCES
, DIRECTORIES
, TESTS
eller CACHE_ENTRIES
– globale egenskaber synes at mangle af en eller anden grund), kan du simpelthen liste dem og få dem udskrevet direkte:
cmake_print_properties( TARGETS my_target PROPERTIES POSITION_INDEPENDENT_CODE)
Sporing af en kørsel
Har du haft lyst til at se præcis, hvad der sker i din CMake-fil, og hvornår? --trace-source="filename"
-funktionen er fantastisk. Hver linje, der køres i den fil, som du angiver, vil blive ekko til skærmen, når den køres, så du kan følge præcis, hvad der sker. Der er også beslægtede muligheder, men de har en tendens til at begrave dig i output.
For eksempel:
cmake -S . -B build --trace-source=CMakeLists.txt
Hvis du tilføjer --trace-expand
, vil variablerne blive ekspanderet til deres værdier.
Bygning i debug-tilstand
For enkeltkonfigurationsgeneratorer kan du bygge din kode med -DCMAKE_BUILD_TYPE=Debug
for at få debugging-flag. I generatorer med flere konfigurationer kan du, ligesom i mange IDE’er, vælge konfigurationen i IDE’en. Der er forskellige flag for denne tilstand (variabler, der ender på _DEBUG
i modsætning til _RELEASE
), samt en generatorudtryksværdi CONFIG:Debug
eller CONFIG:Release
.
Når du har lavet et debug-byggeri, kan du køre en debugger, f.eks. gdb eller lldb på det.