Compartir tecnología

【C】Empezando con CMake

2024-07-12

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

CMake es una herramienta de generación de sistemas de compilación multiplataforma que puede generar archivos de compilación (como Makefiles o archivos de proyecto de Visual Studio) para compilar y vincular aplicaciones.

Instalar CMake

Ventanas

  • Se puede obtener de Sitio web oficial de CMake Descargue e instale la versión de Windows de CMake.
  • Una vez completada la instalación, asegúrese de agregar CMake a la variable de entorno PATH del sistema.

Linux

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

proyecto de archivo de fuente única

Necesitamos proporcionar archivos fuente y proporcionar una descripción de la configuración del proyecto a CMake. Esta descripción se realiza utilizando CMake; la documentación completa se puede encontrar en https://cmake.org/cmake/help/latest/.

Preparar

Cree un proyecto C++ simple que contenga los siguientes archivos:

  • CMakeLists.txt
  • principal.cpp

Queremos compilar el código fuente de main.cpp en un único archivo ejecutable:

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

CMakeLists.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

generar

Abra un símbolo del sistema, navegue hasta el directorio del proyecto y ejecute:

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

O utilice, con el mismo efecto:

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

La configuración del proyecto ya está enbuild generado en el directorio. Ahora podemos compilar el ejecutable:

cmake --build .
  • 1

generador de interruptor

CMake es un generador de sistemas de compilación que puede usar un único CMakeLists.txt para configurar proyectos para diferentes conjuntos de herramientas en diferentes plataformas. Describe en CMakeLists.txt las acciones que su sistema de compilación debe ejecutar para configurar y compilar su código. Según estas instrucciones, CMake generará las instrucciones correspondientes para el sistema de compilación seleccionado (Unix Makefile, Ninja, Visual Studio, etc.).

  • Compilador de Visual Studio (MSVC): Adecuado para sistemas Windows, los generadores de uso común son NMake Makefiles oVisual Studio.
  • MinGW o MSYS2: Adecuado para el sistema Windows, puede utilizar MinGW Makefiles.
  • Archivos Make de Unix: Para sistemas tipo Unix como Linux o macOS.
cmake -Bbuild -G "NMake Makefiles"
  • 1

Múltiples proyectos ejecutables y de biblioteca.

Preparar

La estructura del directorio es la siguiente:

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

CMakeLists.txt

necesitamos escribir CMakeLists.txt files para compilar estos archivos y vincularlos con la biblioteca.

# 指定 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

generar

Abra un símbolo del sistema o terminal y navegue hasta el directorio raíz del proyecto:

cd Test
  • 1

crear build directorio y navegue hasta él:

mkdir build
cd build
  • 1
  • 2

Ejecute el comando de configuración de CMake:

cmake ..
  • 1

Ejecute el comando de compilación:

cmake --build .
  • 1