How to make cmake output to the "build" directory?

Disclaimer: I recommend going with @john-zwinck's answer.

By default, cmake uses the current working directory as build directory and whatever path you provide as source directory. So the normal way of achieving your goal is

  • create the build directory (mkdir build)
  • go there (cd build)
  • call cmake with the source dir as argument (cmake path/to/source)

BUT there is another way, as far as I know not documented in the cmake docs and only kept for compatibility reasons or internal usage, that some people are using. The -B and -H flags

cmake -Hpath/to/source -Bpath/to/build

or even from the source dir

cmake . -Bbuild

Important: no space after -B.


The usual way to do this, rather than changing variables to set the path, is simply to create the output directory, change to it, and run cmake from there. So instead of cmake . you usually have cmake .. or similar.

I understand the initial impulse to say "But I expect my build system to write output somewhere else." But CMake is not usually used in the way you were initially expecting, and other people who run your CMake build won't expect what you were expecting, so it's probably best to just use the built-in, default behavior, which is to put the output wherever cmake was run.

Put another way: You are fighting against the tool. Don't do that.

Tags:

C++

Cmake