cmake入门

CMake 是一个跨平台的开源工具,旨在管理项目的构建过程。它通过使用平台无关的配置文件生成特定平台的构建文件(如 Makefile 或 Visual Studio 项目文件)。CMake 的灵活性和广泛的适用性使其成为现代 C++ 项目中常用的构建工具。

基本概念

  1. CMakeLists.txt:CMake 使用一个或多个名为 CMakeLists.txt 的文件来配置构建过程。这个文件包含项目名称、版本信息、源文件列表、编译选项、库依赖等信息。
  2. 构建目录:通常,CMake 项目会在一个单独的目录中构建,这样可以保持源代码目录的整洁。

安装 CMake

在大多数系统上,可以使用包管理器安装 CMake。例如:

  • 在 Ubuntu 上:
    sudo apt-get install cmake
    
  • 在 macOS 上:
    brew install cmake
    

创建一个简单的 CMake 项目

项目结构

假设有一个简单的项目,目录结构如下:

MyProject/
├── CMakeLists.txt
└── main.cpp
main.cpp
#include <iostream>

int main() {
    std::cout << "Hello, CMake!" << std::endl;
    return 0;
}
CMakeLists.txt
cmake_minimum_required(VERSION 3.10)

# 项目名称和版本
project(MyProject VERSION 1.0)

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

# 添加可执行文件
add_executable(MyProject main.cpp)

构建项目

  1. 创建构建目录

    mkdir build
    cd build
    
  2. 运行 CMake

    cmake ..
    
  3. 编译项目

    make
    

生成的可执行文件位于 build 目录中,可以运行它:

./MyProject

输出应为:

Hello, CMake!

添加库

假设我们要添加一个静态库和一个共享库,并在项目中使用它们。项目结构更新如下:

MyProject/
├── CMakeLists.txt
├── main.cpp
├── MathFunctions/
│   ├── CMakeLists.txt
│   ├── MathFunctions.h
│   └── MathFunctions.cpp
MathFunctions/MathFunctions.h
#pragma once

int add(int a, int b);
int multiply(int a, int b);
MathFunctions/MathFunctions.cpp
#include "MathFunctions.h"

int add(int a, int b) {
    return a + b;
}

int multiply(int a, int b) {
    return a * b;
}
MathFunctions/CMakeLists.txt
# 设置库文件
add_library(MathFunctions STATIC MathFunctions.cpp)

# 将库包含目录暴露给使用该库的目标
target_include_directories(MathFunctions PUBLIC ${CMAKE_CURRENT_SOURCE_DIR})
修改根 CMakeLists.txt
cmake_minimum_required(VERSION 3.10)

project(MyProject VERSION 1.0)

set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED True)

# 添加子目录
add_subdirectory(MathFunctions)

# 添加可执行文件
add_executable(MyProject main.cpp)

# 链接 MathFunctions 库
target_link_libraries(MyProject PRIVATE MathFunctions)
修改 main.cpp 使用 MathFunctions
#include <iostream>
#include "MathFunctions.h"

int main() {
    int a = 5;
    int b = 3;
    std::cout << "Add: " << add(a, b) << std::endl;
    std::cout << "Multiply: " << multiply(a, b) << std::endl;
    return 0;
}

构建项目(再次)

重复之前的步骤,在 build 目录中运行 CMake 和 Make:

cd build
cmake ..
make
./MyProject

输出应为:

Add: 8
Multiply: 15

更多高级用法

  • 配置文件生成器:可以生成特定平台的构建文件,如 Visual Studio 项目文件:

    cmake -G "Visual Studio 16 2019" ..
    
  • 使用第三方库:可以使用 find_package 找到并链接第三方库,例如 Boost

    find_package(Boost 1.65 REQUIRED)
    include_directories(${Boost_INCLUDE_DIRS})
    target_link_libraries(MyProject ${Boost_LIBRARIES})
    
  • 设置编译选项:可以使用 target_compile_options 设置编译选项:

    target_compile_options(MyProject PRIVATE -Wall -Wextra -Werror)
    
  • 测试支持:可以使用 CTest 添加测试:

    enable_testing()
    add_test(NAME MyTest COMMAND MyProject)
    

通过学习和使用 CMake,可以更好地管理和构建跨平台 C++ 项目,提高开发效率和代码质量。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

东东要拼命

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值