CMakeToolchain: Building your project using CMakePresets¶
In this example we are going to see how to use CMakeToolchain
, predefined layouts like cmake_layout
and the
CMakePresets
CMake feature.
Let’s create a basic project based on the template cmake_exe
as an example of a C++ project:
$ conan new -d name=foo -d version=1.0 cmake_exe
Generating the toolchain¶
The recipe from our project declares the generator “CMakeToolchain”.
We can call conan install to install both Release
and Debug
configurations.
The conan_toolchain.cmake
is common for both configurations and located at build/generators folder:
$ conan install .
$ conan install . -s build_type=Debug
Building the project using CMakePresets
¶
A CMakeUserPresets.json
file is generated in the same folder of your CMakeLists.txt
file,
so you can use the --preset
argument from cmake >= 3.23
or use an IDE that supports it.
The CMakeUserPresets.json
is including the CMakePresets.json
file located at the build/generators
folder.
The CMakePresets.json
contain information about the conan_toolchain.cmake
location and even the binaryDir
set with the output directory.
Note
CMake >= 3.23 is required because the “include” from CMakeUserPresets.json
to CMakePresets.json
is only supported since that version.
If you are using a multi-configuration generator:
$ cmake --preset default
$ cmake --build --preset Debug
$ build\Debug\foo.exe
foo/1.0: Hello World Release!
$ cmake --build --preset Release
$ build\Release\foo.exe
foo/1.0: Hello World Release!
If you are using a single-configuration generator:
$ cmake --preset Debug
$ cmake --build --preset Debug
$ ./build/Debug/foo
foo/1.0: Hello World Debug!
$ cmake --preset Release
$ cmake --build --preset Release
$ ./build/Release/foo
foo/1.0: Hello World Release!
Note that we did’nt need to create the build/Release
or build/Debug
folders, as we did in the
tutorial. The output directory
is declared by the cmake_layout()
and automatically managed by the CMake Presets feature.
This behavior is also managed automatically by Conan (with CMake >= 3.15) when you build a package in the Conan cache (with conan create command). The CMake >= 3.23 is not required.