Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Is there a way to get errors when a CMake command fails?

Tags:

cmake

I am writing a script and started working with the install command (for copying files) and it is not working. CMake configure/generate does not show any errors (i.e. it does not stop and no warnings/errors show related to this command) and the command does not seem to be working, because I don't see any files being copied.

Since I am new, I am wondering:

  • How can I tell that install failed (perhaps the source directory was wrong, or the destination directory was wrong)? It appears to be failing silently.
  • Are there error codes I can check to see what went wrong?
  • When is install called? When I click configure? Or when the project is built?

I am on Windows.

like image 829
Samaursa Avatar asked Jan 20 '26 09:01

Samaursa


1 Answers

To the general question, there are a number of ways to get more verbose output from CMake - I just learned a third for gnarly errors:

  1. to debug CMake recipes, I like using the message command and you can even iterate over directories and issue messages*
    • e.g. message( STATUS "SQLITE3_LIB: ${SQLITE3_LIB} SQLITE3_PATH: ${SQLITE3_PATH}") # prints SQLITE3_LIB and SQLITE3_PATH variables
  2. perform verbose builds to troubleshoot your build itself
    • run make VERBOSE=1 (with make, ninja -v with ninja, etc.) to help you troubleshoot the process, such as cmake -DYOUR_OPTION="insert values" ~/path/to/files/ && make VERBOSE=1
  3. if you ever find an inscrutable error, I just learned that we can run strace on the failing command - this can be a bit overwhelming, but can help when you have exhausted #1 and #2
    • I just used strace /usr/bin/cmake -E copy_directory $MY_SOURCE_PATH $MY_DEST_PATH to try to understand why a copy was failing

*I have used DLRdave's answer to a different question to print out the INCLUDE_DIRS:

get_property(dirs DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} PROPERTY INCLUDE_DIRECTORIES)
foreach(dir ${dirs})
  message(STATUS "dir='${dir}'")
endforeach()
like image 54
sage Avatar answered Jan 22 '26 20:01

sage



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!