A Step-By-Step Guide to Install CMake on Linux

Cmake

In this article, we’ll learn to install cmake on Linux. CMake is a cross-platform open-source meta-build system that can build, test, and package software. It can be used to support multiple native build environments including make in Linux/Unix, Apple’s Xcode, and Microsoft Visual Studio.

How to Install CMake on Linux?

If you are to work with CMake in Linux, you’ll probably need a C/C++ compiler and the make build system since CMake generates ‘Makefiles’ on Linux. A Makefile contains the steps for compiling the program and generating an executable. The installation steps for these tools depend on the distribution.

We will be looking at two ways to install CMake.

1. Using Package Managers like apt/dnf

Note: Installing this way, the version of CMake installed will generally be an older one.

For Ubuntu/Debian (and their derivatives)

We can obtain information of a package and its dependencies using the apt command. Doing that for cmake:

$ apt show cmake
Apt Show Cmake
apt show cmake output

As is highlighted in the screenshot above, cmake recommends installing gcc (GNU Compiler Collection) and make. It also suggests some packages which are optional. You’ll need to install g++ if you’re working on a C++ project.

To install cmake , g++ and make using the apt command, type:

$ sudo apt install cmake g++ make
Install Cmake 1
Install cmake using apt

Note that while installing these packages, the gcc package is also installed.

For Fedora/CentOS (RedHat based distros and their derivatives)

To install cmake , g++ and make using the dnf command, type:

$ sudo dnf install cmake gcc-c++ make
Cmake Using Dnf Centos
Installing cmake using dnf

2. Using CMake’s Official Website

CMake’s official website has two options to install CMake on Linux as of now:

  • A shell script (.sh file)
  • A .tar.gz archive

Installing through either of them will get you the latest version of CMake. You’ll still need a compiler (gcc/g++) and make. You can install them using the package manager. For Ubuntu/Debian based distros, type:

$ sudo apt install g++ make

For RedHat Based distros, type:

$ sudo dnf install gcc-c++ make

For CentOS 8 based systems, we’ll be using the shell script. You can either download the script by clicking on the .sh file link on the website or by using the wget command :

$ wget https://github.com/Kitware/CMake/releases/download/v3.18.2/cmake-3.18.2-Linux-x86_64.sh -O cmake.sh

Note: The link is for the latest version of CMake as of writing this article and may change in the future.

It is in general a good idea to inspect scripts before running them. To do that you can open it in the editor of your choice. Using the nano editor to open it:

$ nano cmake.sh
Viewing Cmake Script
Viewing CMake Script

Going through the script, it also contains the .tar.gz archive for the CMake binary. Hence, it’s size (~40MB). The script acts like a ‘self extracting archive’. Now that we’ve inspected the script, we can run it from the current directory using:

$ sudo sh cmake.sh --prefix=/usr/local/ --exclude-subdir
Cmake Install Using Script 1
Cmake Install Using Script

The above command will install cmake globally for all users to /usr/local/bin and the exclude-subdir option is to get rid of the extra directory that is produced while extracting the .tar.gz archive.

(You need the tar command as the script uses it. If prompted tar: command not found , install it by typing $ sudo dnf install tar)

Also, cmake will not be managed by the system package manager when installed this way. To update cmake you’ll need to repeat this process for any new versions.

A Sample CMake project

We’ll create a simple C++ Hello World program which uses CMake. Let’s start by creating a different directory for our project. Using the mkdir and cd commands:

$ mkdir projectzero; cd projectzero

Currently, the directory is empty. We’ll now create a C++ source file named hello_world.cpp which, as the name suggests, will print just Hello World!

You can use the editor of your choice. I’ll be using nano:

$ nano hello_world.cpp
#include <iostream>

int main() {
std::cout << "Hello World!" << std::endl;
return 0 ;
}

Now we’ll create a CMakeLists.txt file(with this exact capitalization) which is required by CMake:

$ nano CMakeLists.txt

The root directory of the project ( ~/projectzero in this case) must contain a CMakeLists.txt file. Each line in a CMakeLists.txt file has a command.

The CMakeLists.txt file for this project is quite trivial and will only contain these three lines:

cmake_minimum_required(VERSION 3.18)
project(MyProject VERSION 0.0.1)

add_executable(hello hello_world.cpp)

It’s a good practice to have a separate build directory for executables. So, let’s do that:

$ mkdir build

The project structure looks like this now:

Project Structure
Project Structure

To run cmake we need to change into the build directory:

$ cd build
$ cmake ..
Cmake Configuration
cmake Configuration

The .. is an alias for the parent directory and tells cmake to find the CMakeLists.txt file in the parent directory. If you see CXX anywhere while working with CMake, it refers to C++ as CXX.

Running cmake .. generated the configuration files for CMake in projectzero/build . We can list the contents of build directory using the ls command:

Build Directory Contents
build Directory Contents

Now we can generate the executable simply by typing:

$ cmake --build .
Building Executable
Building Executable

Run the executable by typing:

$ ./hello
Running The Executable
Running The Executable

Congratulations on building your first CMake project. You can find more such beginner-friendly CMake projects on this GitHub profile.

Conclusion

In this article we learnt how to install CMake on Linux and created a simple Hello World program using CMake. CMake is a very useful tool for C/C++ development. You can find more information about CMake in its documentation.