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?
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):