CMake快速上手

一:CMake概述

Cmake是跨平台的构建配置工具,并且语法简单,功能强大,IDE支持度高,是C/C++事实上的构建标准。

二:CMake安装

CMake官方源代码下载地址
CMake官方英文参考文档

我的linux系统内核版本:

Linux hcss-ecs-0598 5.4.0-218-generic #238-Ubuntu SMP Mon May 19 10:42:47 UTC 2025 x86_64 x86_64 x86_64 GNU/Linux

正常来讲,系统里面因该是自带cmake的,唯一的问题可能是版本有点低

bash 复制代码
zjh@hcss-ecs-0598:~/git_linux_test$ cmake --version
cmake version 3.16.3

如果想升级版本:可以使用如下命令:

bash 复制代码
sudo snap install cmake --classic

执行完之后你就能直接用 /snap/bin/cmake,系统会自动链接到 cmake

三:CMake与makefile对比

项目 CMake Makefile
本质 构建配置生成器(会自动生成 Makefile/VS/Xcode) 构建脚本本身(直接给 make 执行)
抽象层级 高层抽象:描述"我要编译什么" 低层脚本:你得告诉它"怎么编译"
跨平台能力 极强:Linux、Windows、macOS 全通吃 基本只适合 Unix/Linux
维护成本 大项目成本低(自动管理依赖、库、路径) 大项目成本爆炸(规则太多)
写法感受 结构化、现代化 古早味强,容易踩坑(缩进、tab、变量习惯不同)
依赖管理 内置 find_package、target_link_libraries,非常方便 手动指定路径,容易出错
适合项目规模 中大型项目、多人合作、跨平台库 小型项目、简单 Demo
生态支持 主流 C++ 库都提供 CMake 示例 越来越少,逐渐退出主流
生成的输出 Makefile / VS 工程 / Ninja / Xcode 只能生成 Make 构建流程
学习成本 稍微有点学习门槛 简单上手但难写好大型项目

四:牛刀小试

1. 创建文件main.cpp

bash 复制代码
#include<iostream>


int main()
{
    std::cout<<"hello,world"<<std::endl;


    return 0;
}

2. 创建文件CMakeLists.txt

注意:CMakeLists.txt这个文件名字是不能够改变的

bash 复制代码
# 1.设置cmake能够运行的最低版本

cmake_minimum_required(VERSION 3.18)

# 2.项目名称

project(HelloWorld)

# 3.添加构建目标

add_executable(main main.cpp)
  • 设置最低运行版本的原因:这样系统可以检测此时的版本,如果低于你所设置的版本就会报错,这样可以防止你写了一个函数,而这个函数的版本是高于目前的系统版本的。

命令行操作:

bash 复制代码
zjh@hcss-ecs-0598:~/git_linux_test/11-30$ ls
CMakeLists.txt  main.cpp


zjh@hcss-ecs-0598:~/git_linux_test/11-30$ cmake . //在当前文件夹运行cmake


-- The C compiler identification is GNU 9.4.0
-- The CXX compiler identification is GNU 9.4.0
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: /usr/bin/cc - skipped
-- Detecting C compile features
-- Detecting C compile features - done
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: /usr/bin/c++ - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Configuring done (0.3s)
-- Generating done (0.0s)
-- Build files have been written to: /home/zjh/git_linux_test/11-30
zjh@hcss-ecs-0598:~/git_linux_test/11-30$ ls
CMakeCache.txt  CMakeFiles  cmake_install.cmake  CMakeLists.txt  main.cpp  Makefile

zjh@hcss-ecs-0598:~/git_linux_test/11-30$ make

[ 50%] Building CXX object CMakeFiles/main.dir/main.cpp.o
[100%] Linking CXX executable main
[100%] Built target main
zjh@hcss-ecs-0598:~/git_linux_test/11-30$ ls
CMakeCache.txt  CMakeFiles  cmake_install.cmake  CMakeLists.txt  main  main.cpp  Makefile

zjh@hcss-ecs-0598:~/git_linux_test/11-30$ ./main 

hello,world
相关推荐
世转神风-24 分钟前
qt-kits-警告:No C++ compiler,无法正常解析工程项目.pro文件
开发语言·c++
王老师青少年编程33 分钟前
csp信奥赛C++标准模板库STL(12):C++ STL 中的 next_permutation详解
c++·stl·排列·标准模板库·csp·信奥赛·permutation
深盾科技1 小时前
融合C++与Python:兼顾开发效率与运行性能
java·c++·python
代码村新手1 小时前
C++-入门
开发语言·c++
神舟之光2 小时前
VSCode编译运行C/C++程序问题及解决方法
开发语言·c++
坐怀不乱杯魂2 小时前
C++ STL unordered_map/set 实现
开发语言·c++
egoist20232 小时前
【Linux仓库】超越命令行用户:手写C语言Shell解释器,解密Bash背后的进程创建(附源码)
linux·c语言·bash·xshell·环境变量·命令行参数·内建命令
hetao17338372 小时前
2025-12-21~22 hetao1733837的刷题笔记
c++·笔记·算法
呱呱巨基3 小时前
Linux 进程控制
linux·c++·笔记·学习
罗湖老棍子3 小时前
最小函数值(minval)(信息学奥赛一本通- P1370)
数据结构·c++·算法··优先队列·