当前位置: 首页 > ds >正文

CMake入门:1、环境搭建

一、CMake 基础概念​

CMake 是一个跨平台的自动化构建工具,用于管理软件项目的构建、编译和安装过程。它通过编写简单的 CMakeLists.txt 脚本,能够生成适用于不同平台的原生构建文件(如 Makefile、Visual Studio 项目等),极大简化了跨平台开发的复杂度。目前 CMake 的最新稳定版本为 3.26.5,支持 Windows、macOS、Linux 等主流操作系统。


二、Windows 平台搭建步骤

(一)安装程序下载

  1. 打开 CMake 官方下载页面(Download CMake),在 Windows binaries 栏目选择适合的安装包:(建议选择msi后缀的)
  2. 双击安装包启动安装向导,建议勾选 "Add CMake to the system PATH for all users" 选项,自动配置系统环境变量。

(二)手动配置环境变量(可选)

若安装时未勾选自动配置,需手动添加:

  1. 右键 "此电脑"→"属性"→"高级系统设置"→"环境变量"
  2. 在系统变量的 Path 条目下,添加 CMake 的安装路径

(三)验证安装

打开命令提示符(CMD)或 PowerShell,输入:

cmake --version


三、Linux 平台搭建步骤

输入对应系统的命令行即可,我这里用的是centos10,编译器你可以选择gcc 或者 clang,至于用哪个看你需求,我建议用clang,它的使用体验比gcc舒服,特别是报错和警告方面都比gcc像人

sudo yum install gcc clang make cmake              #Centos系统
sudo apt-get install gcc clang make cmake          #Ubuntu/Debian系统

四、在vscode中下载插件

我接下来的系统是centos10系统的演示,如果你现在用的是windows系统,建议你安装一个linux虚拟机,然后用vscode连接虚拟机,毕竟c++程序员你必需得懂linux嘛。其他的linux系统更centos系统也差不多的,接着向下看也肯定是能看懂的

(一)建议安装的插件:

1、优化vscode使用的插件:




2、c/c++开发需要:




:1、rust-analyzer是用来格式化的,它比clang-format好用
       2、 codelldb需要你手动下载它的本体,vscode会给你弹出链接的,你点一下浏览器会自动给你下载,不过你下的时候需要开加速器,下完之后执行一下操作

  1. Ctrl + Shift + p
  2. 搜索安装
  3. 点击显示本地
  4. 找到你下载的codelldb位置,再点击一下

(二)虚拟机要下载的包

yum install llvm clangd clang lldb

五、编写vscode的配置文件

1、launch.json文件

(cmake只需要这一个用来调试就行了,运行直接用命令就行了,所以不需要tasks.json)

{// VS Code 调试配置文件版本(必须与 VS Code 调试协议兼容)// 参考:https://code.visualstudio.com/docs/editor/debugging#_launch-json-schema"version": "0.2.0",// 调试配置数组(可定义多个不同的调试配置)"configurations": [{// 调试器类型:使用 LLDB 调试器(适用于 C/C++ 等编译型语言,基于 LLVM 调试框架)// 注意:若使用 MinGW 或 MSVC 工具链,可能需要改为 "cppdbg" 或 "cppvsdbg""type": "lldb",// 调试请求类型:"launch" 表示启动程序进行调试(可选 "attach" 表示附加到已运行进程)"request": "launch",// 调试配置名称:显示在 VS Code 调试面板的下拉菜单中"name": "Debug",// 调试目标程序路径:// 使用 CMake Tools 插件的动态命令获取当前激活的 CMake 目标路径// 依赖条件://   1. 已安装 CMake Tools 插件//   2. 已通过 CMake: Configure 和 CMake: Build 生成可执行文件//   3. CMakeLists.txt 中正确配置了 add_executable() 目标"program": "${command:cmake.launchTargetPath}",// 传递给目标程序的命令行参数(数组形式,留空表示无参数)"args": [],// 目标程序的工作目录:设置为 VS Code 工作区根目录// ${workspaceFolder} 是 VS Code 内置变量,指代打开的文件夹路径"cwd": "${workspaceFolder}",// 内部控制台选项:"neverOpen" 表示不自动打开 VS Code 内置控制台// 可选值://   - "neverOpen":不打开//   - "openOnSessionStart":调试启动时打开//   - "openOnError":出错时打开"internalConsoleOptions": "neverOpen",// 控制台类型:使用 VS Code 集成终端(integratedTerminal)显示程序输出和调试交互// 可选值://   - "internalConsole":VS Code 内置简单控制台(不支持用户输入)//   - "integratedTerminal":VS Code 集成终端(支持输入输出)//   - "externalTerminal":外部系统终端"console": "integratedTerminal"}]
}

2、CMakeLists.txt文件

# CMake 最低版本要求
cmake_minimum_required(VERSION 3.10)# 项目名称
project(test)# 设置 C++ 标准
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)# 设置二进制文件输出目录
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR}/bin)
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR}/bin)
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR}/bin)# 添加头文件搜索路径
include_directories(${PROJECT_SOURCE_DIR}/include)# 自动查找 src 目录下的所有源文件
file(GLOB_RECURSE SOURCES "${PROJECT_SOURCE_DIR}/src/*.cpp")# 添加可执行文件
add_executable(test ${SOURCES} main.cpp)
set (EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin)

六、测试项目

1、项目结构

2、include的文件

#ifndef ADD_H
#define ADD_Hint add(int a, int b);#endif // !ADD_H
#ifndef MULTIPLY_H
#define MULTIPLY_Hint multiply(int a, int b);#endif // !MULTIPLY_H

3、src目录的文件

#include "add.h"int add(int a, int b)
{return a + b;
}
#include "multiply.h"int multiply(int a, int b)
{return a * b;
}

4、项目根目录的文件

#include <iostream>
#include "add.h"
#include "multiply.h"void test(int a, int b)
{std::cout << "TEST Func add: " << add(a, b) << std:: endl;std::cout << "TEST Func multiply: " << multiply(a, b) << std:: endl;  
}int main()
{test(1, 2);test(3, 4);return 0;
}

5、测试调试

http://www.xdnf.cn/news/12055.html

相关文章:

  • 防火墙设置实战操作案例(小白的“升级打怪”成长之路)
  • FreeType 字体信息检查工具 - 现代C++实现
  • selenium学习实战【Python爬虫】
  • 【贪心、DP、线段树优化】Leetcode 376. 摆动序列
  • 当AI遇上防火墙:新一代智能安全解决方案全景解析
  • Elasticsearch中的自定义分析器(Custom Analyzer)介绍
  • 2025最新Java日志框架深度解析:Log4j 2 vs Logback性能实测+企业级实战案例
  • 一个完整的时间序列异常检测系统,使用Flask作为后端框架,实现了AE(自编码器)、TimesNet和LSTM三种模型,并提供可视化展示
  • Asp.Net Core基于StackExchange Redis 缓存
  • 使用TypeScript构建一个最简单的MCP服务器
  • PDF处理控件Aspose.PDF教程:在 C# 中更改 PDF 页面大小
  • 【从零学习JVM|第二篇】字节码文件
  • Android 项目的核心配置文件
  • 数据结构第一章
  • 边缘计算网关赋能沸石转轮运行故障智能诊断的配置实例
  • Flutter如何支持原生View
  • Unity安卓平台开发,启动app并传参
  • 如何配置一个sql server使得其它用户可以通过excel odbc获取数据
  • 【大模型:知识图谱】--5.neo4j数据库管理(cypher语法2)
  • rknn优化教程(一)
  • DPO算法微调实战
  • 微信小程序动态组件加载的应用场景与实现方式
  • 双电机差速控制的MATLAB Simulink仿真方案,使用PWM和PID调节实现360°转向与速度控制
  • 分类预测 | Matlab实现CNN-BiLSTM-Attention高光谱数据分类预测
  • PostgreSQL的扩展 pg_buffercache
  • TDengine 开发指南——高效写入
  • ​BEV和OCC学习-3:mmdet3d 坐标系
  • 知识拓展卡————————关于Access、Trunk、Hybrid端口
  • Duix.HeyGem:以“离线+开源”重构数字人创作生态
  • Rust 控制流