Introduction to CMake

CMake is an extensible, open-source system that manages the build process in an operating system and in a compiler-independent manner.

Lets assume we have a simple application with a single main.c file.

We create a CMakeLists.txt file in the root of our project:

cmake_minimum_required(VERSION 2.8)
 
project(app_project)
 
add_executable(myapp main.c)
 
install(TARGETS myapp DESTINATION bin)

Thats all we need to be able to build our application.

  • cmake_minimum_required build requires version 2.8 or greater of cmake
  • project defines unique project name
  • add_executable defines our binary with all linked source files
  • install tells cmake to install our binary into the bin directory of the install directory

Building

CMake supports out-of-source builds, so all our compiled code goes into a directory separate to the sources.

To start a build we create a new folder:

$ mkdir build
$ cd build

And call cmake with the path to the project’s root

$ cmake ..

This will generate build scripts this should be Makefiles On Linux.

By default cmake will install the build into the system directories. To define a custom install directory we simply pass it to cmake:

$ cmake .. -DCMAKE_INSTALL_PREFIX=../install

To run the build script we can simply use the Makefile:

$ make
$ make install

We can now run our binary from the install directory:

$ ../install/myapp