Eleno
Eleno

Reputation: 3016

CMake workflow?

I am learning CMake and I am having problems in understanding its multi-step workflow. So far, my understanding is that you:

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

Answers (2)

Gabriel Staples
Gabriel Staples

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:

enter image description here

Upvotes: 1

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

  1. Run CMake GUI, point it to the source directory (input) and binary directory (output) you want
  2. Configure. This will fill the cache with project-specified defaults. If CMake cannot find some dependencies of the project automatically, this will end with an error.
  3. Inspect the cache, change any values you don't like (such as compilation options), fill in any missing options (paths to libraries CMake couldn't find etc.)
  4. Repeat steps 2 & 3 until you're satisfied with the project's setup.
  5. Generate the buildsystem.
  6. Exit CMake GUI and build using the appropriate build tool.

Upvotes: 9

Related Questions