Construction de projets Visual Studio C++ avec CMake

Guide CMake pour Visual Studio

Cet article utilise Windows 10 X64 et VS2019

Table des matières :

    1. Exemple avec un ou plusieurs fichiers
    1. Création de fichiers de bibliohtèque statique
    1. Compilation de bibliothèques dynamiques
    1. Exemple avec plusieurs répertoires
    1. Génération de projets .sln avec CMake
  1. Exemple avec un ou plusieurs fichiers - ADD_EXECUTABLE

Étape 1 : Créer le dossier CMakeProject\MonProjet\src

Étape 2 : Dans le dossier src, créer deux fichiers : MonProjet.cpp et CMakeLists.txt

Étape 3 : Fichier MonProjet.cpp :

#include "MonProjet.h"
using namespace std;

int main()
{
    saluer();
    cout << "Bienvenue dans CMake." << endl;
    return 0;
}

Fichier saluer.cpp :

using namespace std;

int saluer()
{
    cout << "Bonjour le monde." << endl;
    return 0;
}

Étape 4 : Fichier CMakeLists.txt

PROJECT (BIENVENUE)

# Include des répertoires
INCLUDE_DIRECTORIES (${PROJECT_SOURCE_DIR}/lib)
SET (SOURCES saluer.cpp MonProjet.cpp)

# Répertoire de sortie pour l'exécutable
SET (EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}/bin)    
ADD_EXECUTABLE (monapp ${SOURCES})

Étape 5 : Ouvrir : Démarrer → Microsoft Visual Studio 2019 → Outils Visual Studio → Invite de commandes développeur VS2019 ou PowerShell

Étape 6 : Se positionner dans le répertoire src et exécuter :

mkdir build
cd build
cmake .. -G "NMake Makefiles"
nmake

Résultat : Le fichier monapp.exe est généré dans le répertoire build\bin\

  1. Création d'une bibliothèque statique - ADD_LIBRARY

Voici le fichier CMakeLists.txt pour générer une bibliothèque statique :

PROJECT (BIENVENUE)
    
INCLUDE_DIRECTORIES (${PROJECT_SOURCE_DIR}/lib)
SET (SRC_LIB hello.c)
SET (SRC_APP MonProjet.cpp)

SET (LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR}/bin)

# Par défaut, sans spécification, une bibliothèque statique est générée
ADD_LIBRARY (mabibliotheque ${SRC_LIB})

# Pour spécifier le nom de sortie de la bibliothèque
SET_TARGET_PROPERTIES(mabibliotheque PROPERTIES OUTPUT_NAME "bibliostatique")

  1. Création d'une bilbiothèque dynamique - ADD_LIBRARY SHARED

Étape 1 : Créer un fichier d'en-tête définissant les macros d'exportation

#ifndef _EXPORT_MACROS_HPP_
#define _EXPORT_MACROS_HPP_

#if defined(_WIN32)
#if defined(MONPROJET_BUILD)
#if defined(MONPROJET_EXPORTS)
#define API_EXPORT __declspec( dllexport )
#else
#define API_EXPORT __declspec( dllimport )
#endif // MONPROJET_EXPORTS
#else
#define API_EXPORT
#endif // MONPROJET_BUILD
#else
#define API_EXPORT
#endif // _WIN32

#endif // _EXPORT_MACROS_HPP_

Étape 2 : Fichier CMakeLists.txt

CMAKE_MINIMUM_REQUIRED(VERSION 2.8)

SET(SOURCES bibliotheque.c)

ADD_DEFINITIONS("-DMONPROJET_BUILD")

ADD_LIBRARY(mabibliotheque SHARED ${SOURCES})

SET(LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR}/bin)

  1. Génération de projets .sln avec CMake

Méthode 1 : Interface graphique (GUI)

Utiliser cmake-gui comme illustré dans la capture d'écran.

Méthode 2 : Ligne de commande

cmake -A x64 -G "Visual Studio 16 2019" ..

Annexe : Configurations importantes pour les projets CLR gérés dans Visual Studio 2019

1. Préprocesseur

1.1 Définitions de macros :

Projet → Propriétés → Propriétés de configuration → C/C++ → Préprocesseur → Définitions du préprocesseur

2. Compilation

2.1 Standard du langage C++ :

Projet → Propriétés → Propriétés de configuration → C/C++ → Langage → Standard C++

2.2 Répertoires d'en-têtes :

Projet → Propriétés → Propriétés de configuration → C/C++ → Général → Répertoires Include supplémentaires

3. Édition de liens

3.1 Répertoires des bibliothèques :

Méthode 1 : Projet → Propriétés → Propriétés de configuration → Répertoires VC++ → Répertoires de bibliothèques

Méthode 2 : Projet → Propriétés → Propriétés de configuration → Éditeur de liens → Général → Répertoires de bibliothèques supplémentaires

3.2 Bibliothèques dépendantes :

Projet → Propriétés → Propriétés de configuration → Éditeur de liens → Entrée → Dépendances supplémentaires

3.3 Ignorer des bibliothèques spécifiques :

Projet → Propriétés → Propriétés de configuration → Éditeur de liens → Entrée → Ignorer les bibliothèques spécifiques

3.4 Répertoire de sortie et type de configuration :

Projet → Propriétés → Propriétés de configuration → Éditeur de liens → Général → Répertoire de sortie

3.5 CLR géré et extension du fichier cible :

Projet → Propriétés → Propriétés de configuration → Éditeur de liens → Avancé → Type de fichier cible

Étiquettes: CMake visual-studio C++ Build-System Windows

Publié le 3 juillet à 06h45