How do I initialize a CMake variable with the result of a shell command

cmake

Solution

You want the `execute_process` command.

In your case, on Windows:

execute_process(COMMAND CMD /c echo bar OUTPUT_VARIABLE FOO)

or on Linux, simply:

execute_process(COMMAND echo bar OUTPUT_VARIABLE FOO)

In this particular case, CMake offers a cross-platform solution. CMake can itself be used to run commands that can be used on all systems, one of which is `echo`. To do this, CMake should be passed the command line arg `-E`. For the full list of such commands, run `cmake -E help`

Inside a CMake script, the CMake executable is referred to by `${CMAKE_COMMAND}`, so the script needs to do:

execute_process(COMMAND ${CMAKE_COMMAND} -E echo bar OUTPUT_VARIABLE FOO)

Problem

Is there a way to set a variable in a CMake script to the output of a shell command? Something like `SET(FOO COMMAND "echo bar")` would come to mind

Original source

Related problems