Guide CMake pour Visual Studio
Cet article utilise Windows 10 X64 et VS2019
Table des matières :
-
- Exemple avec un ou plusieurs fichiers
-
- Création de fichiers de bibliohtèque statique
-
- Compilation de bibliothèques dynamiques
-
- Exemple avec plusieurs répertoires
-
- Génération de projets .sln avec CMake
- 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\
- 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")
- 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)
- 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