Reputation: 3016
I am learning CMake and I am having problems in understanding its multi-step workflow. So far, my understanding is that you:
CMakeLists.txt
cmake
from a subdirectory to generate a build file (a Makefile, in my case)make
However, I don't understand how you should handle different targets (Release vs Debug). By running CMake in two different subdirectories?
Also, I don't understand why you would edit CMakeCache.txt
(there is also a GUI tool for that). To emulate what you would accomplish with ./configure
by passing different options?
Upvotes: 7
Views: 5911
Reputation: 53045
What @Angew said. Plus here's an image of the cmake-gui
:
Also note that you install it (the CMake GUI) on Ubuntu with sudo apt install cmake-qt-gui
, and you run it with cmake-gui
.
Source: Where is the CMake GUI for Linux?
Here's my cmake-gui
image:
Upvotes: 1
Reputation: 171167
You got it pretty much right. The write CMakeLists.txt
> cmake
> make
sequence is correct.
Regarding different configurations (Debug vs. Release), you have to differentiate between multi-config generators (Visual Studio, XCode), and single-config generators (everything else). With the multi-config generators, you generate one buildsystem (e.g. solution file) which contains all configurations, and choosing between them happens at build time.
With single-config generators, different configurations are obtained by generating different buildsystems, that is, by running CMake multiple times in different directories (and with a different value of the CMAKE_BUILD_TYPE
CMake variable).
So you'd do something like this:
> cd my_project/bld/debug
> cmake ../../src -DCMAKE_BUILD_TYPE=Debug
> cd ../release
> cmake ../../src -DCMAKE_BUILD_TYPE=Release
Regarding editing the cache (usually through CMake GUI or ccmake
): you're right again, this largely corresponds to passing options to ./configure
from AutoMake world. This would be the typical workflow with a freshly downloaded project (using CMake GUI):
Upvotes: 9