7 - Introduction à CMake et Ninja

Chapitre 7 : Introduction à CMake et Ninja #

Slides #

Exercices #

Exercice 0 : mise en place #

Créer un répertoire de travail (/Hello_CMake par exemple) et recopier les fichiers suivants en respectant la structure des dossiers :

/CMakeLists.txt

###############################################################################
##########          MINIMUM REQUIREMENTS (some need to be BEFORE project command)
###############################################################################

###############################################################################
##########          PROJECT DETAILS
###############################################################################
cmake_minimum_required(VERSION 3.16)
project(Hello_CMake)

###############################################################################
##########          REQUIREMENTS + GLOBAL DEFINITION
###############################################################################

###############################################################################
##########          PLATFORM SPECIFIC GLOBAL SETTINGS
###############################################################################

###############################################################################
##########          INTERNAL PROJECTS (OUR OWN)
###############################################################################
add_subdirectory(Hello)
add_subdirectory(World)

# Declares an executable called 2242.1_Main containing file main.cpp
add_executable(2242.1_Main main.cpp)

# Specifies that Main executable depends on libraries 2242.1_Hello 2242.1_World
target_link_libraries(2242.1_Main 2242.1_Hello 2242.1_World)

/main.cpp

#include "Hello/Hello.h"
#include "World/World.h"

#include <iostream>

int main()
{
	Hello hello;
	World world;

	hello.Run();
	world.Run();

	return 0;
}

/Hello/CMakeLists.txt

###############################################################################
##########          MINIMUM REQUIREMENTS (some need to be BEFORE project command)
###############################################################################

###############################################################################
##########          REQUIREMENTS + GLOBAL DEFINITION
###############################################################################

###############################################################################
##########          PLATFORM SPECIFIC GLOBAL SETTINGS
###############################################################################

###############################################################################
##########          INTERNAL PROJECTS (OUR OWN)
###############################################################################
# Declares a library called 2242.1_Hello containing files Hello.h and Hello.cpp
add_library(2242.1_Hello Hello.cpp Hello.h)

/Hello/Hello.h

#pragma once

class Hello
{
public:

	Hello() = default;
	virtual ~Hello() = default;
	Hello(const Hello &hello) = delete;
	Hello &operator=(const Hello &hello) = delete;

	void Run();
};

/Hello/Hello.cpp

// STD
#include <iostream>
// LOCAL INCLUDES
#include "Hello.h"

void Hello::Run()
{
	std::cout << "Hello";
}

/World/CMakeLists.txt

###############################################################################
##########          MINIMUM REQUIREMENTS (some need to be BEFORE project command)
###############################################################################

###############################################################################
##########          REQUIREMENTS + GLOBAL DEFINITION
###############################################################################

###############################################################################
##########          PLATFORM SPECIFIC GLOBAL SETTINGS
###############################################################################

###############################################################################
##########          INTERNAL PROJECTS (OUR OWN)
###############################################################################
# Declares a library called 2242.1_World containing files World.h and World.cpp
add_library(2242.1_World World.cpp World.h)

/World/World.h

#pragma once

class World
{
public:

	World() = default;
	virtual ~World() = default;
	World(const World &world) = delete;
	World &operator=(const World &world) = delete;

	void Run();
};

/World/World.cpp

// STD
#include <iostream>
// LOCAL INCLUDES
#include "World.h"

void World::Run()
{
	std::cout << " World!!!" << std::endl;
}

Exercice 1 - Exécuter CMake et Ninja en local #

  1. Installer CMake et Ninja sur votre machine si ce n’est pas déjà fait.
  2. Suivre les instructions données durant le cours pour configurer et compiler un projet simple avec CMake et Ninja.

Exercice 2 - Comprendre le fonctionnement de CMake #

  • Que se passe-t-il quand on modifie un fichier et qu’on recompile le projet ?
  • Que se passe-t-il pour le fichiers compilés précédemment ?

Exercice 3 - Ajuster le projet #

Modifier la structure du projet pour avoir les modules suivants :

  • Module GUI qui contiendra la GUI
  • Module Backend qui contiendra la logique métier
  • Module Middleware qui contiendra la communication entre la GUI et le Backend
  • Le fichier main.cpp doit se trouver à la racine du projet et utiliser les modules précédents.

LAST MODIFIED
February 17, 2026
Benoit Le Callennec
5c84bbf

© HE-Arc 2020-2026 - Tous droits réservés.