How do I debug CMakeLists.txt files?

Cmake

Cmake Problem Overview


Is there a possibility to debug CMakeLists.txt files (at least listing of variables) except for the message statement?

Cmake Solutions


Solution 1 - Cmake

There is no interactive debugger for CMake, however there are also the flags -Wdev, --debug-output and --trace which might help. Also remember to check the log files CMakeFiles\CMakeOutput.log and CMakeFiles\CMakeError.log which mainly collect outputs of processes called by CMake (for example while checking for presence of a type or header).

Since version 3.7, CMake now officially supports a "server mode" so integration in IDEs is likely to improve in the near future. Initial support exists both in Qt Creator and Visual Studio 2017 RC

Solution 2 - Cmake

You can try using the new CMake Script Debugger provided by the VisualGDB tool. It uses an open-source fork of CMake that supports stepping through CMakeLists.txt files, setting code/data breakpoints, evaluating/changing variables, etc.

There's a detailed step-by-step tutorial on the new debugger here

Solution 3 - Cmake

I like to use variable_watch to "debug" my CMakeLists.txt files. Just set in top of my script:

variable_watch(SOME_MY_VAR)

Solution 4 - Cmake

There are steveire's CMake Daemon Tools. I haven't used them myself, but they claim to offer possibilities for introspection that seem to be pretty close to a debugger.

Edit: They are now called CMake-server and are part of CMake 3.7.

Solution 5 - Cmake

Also, read about the env var VERBOSE: https://cmake.org/cmake/help/latest/envvar/VERBOSE.html

I used it this way:

export VERBOSE=defined
make

and got some more verbosity.

In other cases, edit CMakeLists.txt file to include the following line:

set(CMAKE_VERBOSE_MAKEFILE ON)

(Some post on this is https://bytefreaks.net/programming-2/make-building-with-cmake-verbose ).

Also, there are useful cmake options controlling debug output, see the manpage: https://cmake.org/cmake/help/latest/manual/cmake.1.html

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionPeterView Question on Stackoverflow
Solution 1 - CmakeJoeView Answer on Stackoverflow
Solution 2 - CmakeIvan ShcherbakovView Answer on Stackoverflow
Solution 3 - Cmakeleanid.chaikaView Answer on Stackoverflow
Solution 4 - Cmakeusr1234567View Answer on Stackoverflow
Solution 5 - CmakeEugene Gr. PhilippovView Answer on Stackoverflow