Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Verbose output for cmake command

Tags:

cmake

I would like to know if there is any way to debug a cmake process that forcing the command to print mode details about how variables are getting some value. For example, I see

-- Boost version: 1.63.0
-- Boost version: 1.63.0
-- Found the following Boost libraries:
--   system
--   filesystem
--   timer
--   chrono

And I would like to know where does that version is checked and found.

I have added set(CMAKE_VERBOSE_MAKEFILE ON) in the first line of CMakeLists.txt prior to running cmake ... However, I don't see any verbose message.

I am looking for some thing like set -x in bash programming.

like image 637
mahmood Avatar asked Nov 20 '25 17:11

mahmood


2 Answers

Cmake has command line options --trace, --trace-expand, and --trace-source=some_cmake_source

These will give you very verbose output, and if you start cmake like this:

$cmake --trace-expand source_dir

will output complete configure process, with all cmake variables replaced with their value. Since the amount of output is huge (literally) I usually redirect it into file, like this:

$cmake --trace-expand source_dir > trace.txt 2>&1

This will redirect complete output, including error messages, into the file trace.txt.

If you don't want output of complete configure, but one particular file, you should use --trace-source=some-source, like this:

$cmake --trace-source=FindBoost.cmake source_dir

will output execution of that particular file (in this case, it will show the process of searching for boost libraries)

Also, setting CMAKE_VERBOSE_MAKEFILE variable will not help you, since it controls verbosity during the build process, not configure.

at the end, here are references to cmake documentation:

cmake command line options

CMAKE_VERBOSE_MAKEFILE

like image 153
gordan.sikic Avatar answered Nov 25 '25 00:11

gordan.sikic


CMake provides --debug-output and --trace options that can be used when running from the command line:

cmake --debug-output ..

or

cmake --trace ..

The debug-output option provides some high-level insight into how CMake is traversing your CMakeLists.txt file structure; this can be set from the CMake GUI also (Options > Debug Output). The trace option dumps CMake's processing line-by-line (likely want to redirect this output to a file). The trace option also comes with trace-expand and trace-source=<file> flavors, to expand CMake variables and trace only a specific file, respectively.

If you use trace to find a CMake file and variable of interest (e.g. a BOOST variable), you can also make use of variable_watch() to help monitor changes to that variable, and print messages to the screen.

like image 44
Kevin Avatar answered Nov 24 '25 22:11

Kevin



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!