CMake入门:1、环境搭建
一、CMake 基础概念
CMake 是一个跨平台的自动化构建工具,用于管理软件项目的构建、编译和安装过程。它通过编写简单的 CMakeLists.txt 脚本,能够生成适用于不同平台的原生构建文件(如 Makefile、Visual Studio 项目等),极大简化了跨平台开发的复杂度。目前 CMake 的最新稳定版本为 3.26.5,支持 Windows、macOS、Linux 等主流操作系统。
二、Windows 平台搭建步骤
(一)安装程序下载
- 打开 CMake 官方下载页面(Download CMake),在 Windows binaries 栏目选择适合的安装包:(建议选择msi后缀的)
- 双击安装包启动安装向导,建议勾选 "Add CMake to the system PATH for all users" 选项,自动配置系统环境变量。
(二)手动配置环境变量(可选)
若安装时未勾选自动配置,需手动添加:
- 右键 "此电脑"→"属性"→"高级系统设置"→"环境变量"
- 在系统变量的 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会给你弹出链接的,你点一下浏览器会自动给你下载,不过你下的时候需要开加速器,下完之后执行一下操作
- Ctrl + Shift + p
- 搜索安装
- 点击显示本地
- 找到你下载的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;
}