Partage de technologie

【C】Démarrer avec CMake

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

CMake est un outil de génération de système de build multiplateforme qui peut générer des fichiers de build (tels que des Makefiles ou des fichiers de projet Visual Studio) pour compiler et lier des applications.

Installer CMake

les fenêtres

  • Peut être obtenu auprès de Site officiel de CMake Téléchargez et installez la version Windows de CMake.
  • Une fois l'installation terminée, assurez-vous d'ajouter CMake à la variable d'environnement système PATH.

Linux

sudo apt-get update
sudo apt-get install cmake
  • 1
  • 2

projet de fichier source unique

Nous devons fournir les fichiers sources et fournir une description de la configuration du projet à CMake. Cette description est réalisée à l'aide de CMake, la documentation complète peut être trouvée sur https://cmake.org/cmake/help/latest/.

Préparer

Créez un projet C++ simple contenant les fichiers suivants :

  • ListesCMake.txt
  • main.cpp

Nous souhaitons compiler le code source main.cpp en un seul fichier exécutable :

#include<iostream>
int main(){
    std::cout<<"Hello world"<<std::endl;
    return 0;
}
  • 1
  • 2
  • 3
  • 4
  • 5

ListesCMake.txt

# 设置CMake所需的最低版本。如果使用的CMake版本低于该版本,则会发出致命错误
cmake_minimum_required(VERSION 3.10)

# 声明了项目的名称(Test)和支持的编程语言(CXX代表C++)
project(Test CXX)

# 指示CMake创建一个新目标:可执行文件main。这个可执行文件是通过编译和链接源文件main生成的。CMake将为编译器使用默认设置,并自动选择生成工具
add_executable(main main.cpp)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

générer

Ouvrez une invite de commande, accédez au répertoire du projet et exécutez :

mkdir build
cd build
cmake ..
  • 1
  • 2
  • 3

Ou utilisez, avec le même effet :

# 该命令是跨平台的,使用了-H和-B为CLI选项。-H表示当前目录中搜索根CMakeLists.txt文件。-Bbuild告诉CMake在一个名为build的目录中生成所有的文件
cmake -H. -Bbuild
  • 1
  • 2

La configuration du projet est déjà dansbuild généré dans le répertoire. Nous pouvons maintenant compiler l'exécutable :

cmake --build .
  • 1

générateur de commutation

CMake est un générateur de système de build qui peut utiliser un seul fichier CMakeLists.txt pour configurer des projets pour différents ensembles d'outils sur différentes plates-formes. Vous décrivez dans CMakeLists.txt les actions que votre système de build doit exécuter pour configurer et compiler votre code. Sur la base de ces instructions, CMake générera les instructions correspondantes pour le système de build sélectionné (Unix Makefile, Ninja, Visual Studio, etc.).

  • Compilateur Visual Studio (MSVC): Adapté aux systèmes Windows, les générateurs couramment utilisés sont NMake Makefiles ouVisual Studio.
  • MinGW ou MSYS2: Convient au système Windows, vous pouvez utiliser MinGW Makefiles.
  • Makefiles Unix: Pour les systèmes de type Unix tels que Linux ou macOS.
cmake -Bbuild -G "NMake Makefiles"
  • 1

Plusieurs projets d'exécutables et de bibliothèques

Préparer

La structure des répertoires est la suivante :

MyProject/
├── include/
│   └── say.hpp
├── src/
│   ├── main.cpp
│   └── say.cpp
├── lib/
└── bin/
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
# main.cpp

#include"say.hpp"
int main() {
    say();
    return 0;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
# say.cpp

#include<iostream>
#include"say.hpp"
void say(){
    std::cout<<"Hello world!"<<std::endl;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
# say.hpp

#pragma once
void say();
  • 1
  • 2
  • 3
  • 4

ListesCMake.txt

nous devons écrire CMakeLists.txt fichiers pour compiler ces fichiers et établir un lien avec la bibliothèque.

# 指定 CMake 的最低版本要求
cmake_minimum_required(VERSION 3.10)

# 定义项目名称和版本
project(test VERSION 1.0.0)

# 设置 C++ 标准
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED True)

# 添加 include 目录到编译器的头文件搜索路径
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/include)

# 设置库和可执行文件输出路径
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/lib)
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/lib)
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/bin)

# 创建静态库目标
add_library(message
    STATIC # 若动态库则参数为SHARED
    ${CMAKE_CURRENT_SOURCE_DIR}/src/say.cpp
)

# 添加可执行文件
add_executable(test
    ${CMAKE_CURRENT_SOURCE_DIR}/src/main.cpp
)

# 链接静态/动态库到可执行文件
target_link_libraries(test say)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31

générer

Ouvrez une invite de commande ou un terminal et accédez au répertoire racine du projet :

cd Test
  • 1

créer build répertoire et accédez-y :

mkdir build
cd build
  • 1
  • 2

Exécutez la commande de configuration CMake :

cmake ..
  • 1

Exécutez la commande build :

cmake --build .
  • 1