目录

介绍

下载

下载缓慢或进不去网站解决方法

安装

直接下一步

勾选协议

添加环境+快捷方式

建议改路径

点击安装

安装中

安装成功

检测安装

命令提示符检测

输入 cmake --verison

简单入门

构建新项目

选择CMake项目

建议更改路径

创建成功

 项目结构分析

CMakeLists.txt

CMakePresets.json

Demo.cpp

Demo.h

如何使用这些文件

在命令行中构建项目

使用 Visual Studio 构建项目

注意事项

项目分析

CMakeLists.txt

CMakePresets.json

CMakePresets.json 文件的作用

简化构建配置:

跨平台构建:

IDE 集成:

脚本化构建:

CMakePresets.json 文件的结构

解释示例

使用 CMakePresets.json 文件

Demo.cpp

Demo.h

项目运行

完结散花


介绍

  • CMake 是一个跨平台的自动化构建系统,它使用配置文件(CMakeLists.txt)来生成标准的构建文件,如Unix的Makefile或Windows的Visual Studio解决方案。
  • CMake 能够处理项目的组织、编译器选项、库依赖和目标文件的生成。
  • CMake 并不直接管理依赖,但它可以找到已安装在系统上的库,并根据需要生成适当的链接指令。
  • CMake 常用于C和C++项目,尤其是那些需要跨平台支持的项目。

下载

CMake 官网- https://cmake.org/

两者都可以

都会跳到 https://github.com/Kitware/CMake

下载缓慢或进不去网站解决方法

考虑部分同学的网络有点慢,

可能需要VPN,公棕号 wmcode 回复 【 vpn 】即可

安装

直接下一步

勾选协议

添加环境+快捷方式

建议改路径

点击安装

安装中

安装成功

检测安装

命令提示符检测

Ctrl + R 输入 cmd

输入 cmake --verison

如果有版本则安装成功

简单入门

我们直接创建简单的项目

构建新项目

选择CMake项目

建议更改路径

创建成功

可以看到它帮我们已经创建好了相关的文件

 项目结构分析

Demo/
│
├── CMakeLists.txt         # 主项目的 CMake 配置文件
├── CMakePresets.json      # 用于存储 CMake 的构建预设(presets)
├── Demo.cpp               # 项目 源文件
├── Demo.h                 # 项目 头文件


让我们来简单分析一下每个文件的作用:

  1. CMakeLists.txt

    • 这是 CMake 的主要配置文件,其中包含了构建项目所需的指令和规则。在这个文件里,你可以指定源代码文件、库依赖、编译选项、生成的目标以及其他与构建相关的配置。
  2. CMakePresets.json

    • 如之前所述,这是一个 JSON 文件,用于存储 CMake 构建预设。这些预设可以包括构建类型(如 Debug 或 Release)、生成器(如 Ninja 或 Visual Studio)、构建目录位置等信息。这样可以在不同的环境中快速配置并运行 CMake。
  3. Demo.cpp

    • 这是你的源代码文件,包含了实现程序功能的具体代码。
  4. Demo.h

    • 这是头文件,一般用来声明类、函数原型和其他公共接口。在 C++ 中,头文件通常包含在多个源文件中,以便于重用代码。

如何使用这些文件

当你准备好构建项目时,可以使用 CMake 从 CMakeLists.txt 文件生成构建文件。这些构建文件可以被构建工具(如 MSBuild 或 Ninja)用来编译和链接源代码。

在命令行中构建项目

如果你想要手动构建项目,可以通过命令行来执行 CMake 和构建命令。假设你想在一个名为 build 的子目录中构建 Debug 版本,可以按照以下步骤操作:

  1. 打开命令提示符或终端窗口。
  2. 导航到项目根目录。
  3. 创建一个构建目录(如果尚未创建):
    1mkdir build
  4. 切换到构建目录:
    1cd build
  5. 运行 CMake 来配置构建系统:
    1cmake -DCMAKE_BUILD_TYPE=Debug ..
  6. 构建项目:
    1cmake --build .

使用 Visual Studio 构建项目

如果你使用的是 Visual Studio,你可以直接打开项目解决方案文件(.sln 文件),然后选择要构建的配置(Debug 或 Release),并使用 Visual Studio 的构建菜单或快捷键来构建项目。

注意事项

  • 确保 CMakeLists.txt 文件正确配置了你的项目,包括添加源文件、定义目标等。
  • 如果你在使用 CMakePresets.json 文件时遇到问题,确保它的格式正确并且与你的构建需求相匹配。
  • 如果你对某些 CMake 指令不熟悉,查阅官方文档或在线资源会有帮助。

项目分析

CMakeLists.txt

# CMakeList.txt: Demo 的 CMake 项目,在此处包括源代码并定义
# 项目特定的逻辑。
#
cmake_minimum_required (VERSION 3.8)

# 如果支持,请为 MSVC 编译器启用热重载。
if (POLICY CMP0141)
  cmake_policy(SET CMP0141 NEW)
  set(CMAKE_MSVC_DEBUG_INFORMATION_FORMAT "$<IF:$<AND:$<C_COMPILER_ID:MSVC>,$<CXX_COMPILER_ID:MSVC>>,$<$<CONFIG:Debug,RelWithDebInfo>:EditAndContinue>,$<$<CONFIG:Debug,RelWithDebInfo>:ProgramDatabase>>")
endif()

project ("Demo")

# 将源代码添加到此项目的可执行文件。
add_executable (Demo "Demo.cpp" "Demo.h")

if (CMAKE_VERSION VERSION_GREATER 3.12)
  set_property(TARGET Demo PROPERTY CXX_STANDARD 20)
endif()

# TODO: 如有需要,请添加测试并安装目标。

CMakePresets.json

CMakePresets.json 文件的作用

  1. 简化构建配置
    • 存储构建选项,如构建目录、生成器、编译器选项等。
    • 允许快速切换构建配置。
  2. 跨平台构建
    • 支持不同平台的构建配置。
    • 方便在不同操作系统间共享构建设置。
  3. IDE 集成
    • 许多现代 IDE 和构建工具支持读取 CMakePresets.json 文件来自动配置构建环境。
  4. 脚本化构建
    • 可以通过脚本调用 cmake 命令来使用预设配置,简化构建过程。

CMakePresets.json 文件的结构

CMakePresets.json 文件通常包含以下部分:

  • version:指定 CMake Presets 规范的版本。
  • vendor:可选部分,用于存储特定于某个工具的信息。
  • configurePresets:一组配置预设。
  • buildPresets:一组构建预设。
  • testPresets:一组测试预设。

{
    "version": 3,
    "configurePresets": [
        {
            "name": "windows-base",
            "hidden": true,
            "generator": "Ninja",
            "binaryDir": "${sourceDir}/out/build/${presetName}",
            "installDir": "${sourceDir}/out/install/${presetName}",
            "cacheVariables": {
                "CMAKE_C_COMPILER": "cl.exe",
                "CMAKE_CXX_COMPILER": "cl.exe"
            },
            "condition": {
                "type": "equals",
                "lhs": "${hostSystemName}",
                "rhs": "Windows"
            }
        },
        {
            "name": "x64-debug",
            "displayName": "x64 Debug",
            "inherits": "windows-base",
            "architecture": {
                "value": "x64",
                "strategy": "external"
            },
            "cacheVariables": {
                "CMAKE_BUILD_TYPE": "Debug"
            }
        },
        {
            "name": "x64-release",
            "displayName": "x64 Release",
            "inherits": "x64-debug",
            "cacheVariables": {
                "CMAKE_BUILD_TYPE": "Release"
            }
        },
        {
            "name": "x86-debug",
            "displayName": "x86 Debug",
            "inherits": "windows-base",
            "architecture": {
                "value": "x86",
                "strategy": "external"
            },
            "cacheVariables": {
                "CMAKE_BUILD_TYPE": "Debug"
            }
        },
        {
            "name": "x86-release",
            "displayName": "x86 Release",
            "inherits": "x86-debug",
            "cacheVariables": {
                "CMAKE_BUILD_TYPE": "Release"
            }
        }
    ]
}

解释示例

  • configurePresets:定义了两个配置预设,分别是 debugrelease

    • name:预设名称。
    • displayName:显示名称,用于用户界面。
    • description:描述。
    • generator:构建生成器,如 Ninja
    • binaryDir:构建目录。
    • cacheVariables:CMake 缓存变量,如 CMAKE_BUILD_TYPE
  • buildPresets:定义了两个构建预设,分别对应 debugrelease 配置预设。

    • name:预设名称。
    • configurePreset:关联的配置预设名称。
  • testPresets:定义了测试预设,用于运行测试。

    • name:预设名称。
    • configurePreset:关联的配置预设名称。

使用 CMakePresets.json 文件

一旦你有了 CMakePresets.json 文件,就可以通过各种工具来利用这些预设。例如,你可以使用 cmake 命令行工具来构建项目:

cmake --preset debug
cmake --build debug

Demo.cpp

// Demo.cpp: 定义应用程序的入口点。
//

#include "Demo.h"

using namespace std;

int main()
{
	cout << "Hello CMake." << endl;
	return 0;
}

Demo.h

// Demo.h: 标准系统包含文件的包含文件
// 或项目特定的包含文件。

#pragma once

#include <iostream>

// TODO: 在此处引用程序需要的其他标头。

项目运行

完结散花

以上便是我个人学习过程中,慢慢笔记的

(到底啦)

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐