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
相关推荐
石山代码2 小时前
C++ 内存分区 堆区
java·开发语言·c++
LuminousCPP4 小时前
数据结构 - 线性表第四篇:C 语言通讯录优化升级全记录(踩坑 + 思考)
c语言·开发语言·数据结构·经验分享·笔记·学习
张小姐的猫4 小时前
【Linux】多线程 —— 线程互斥
linux·运维·服务器·c++
做人求其滴6 小时前
面试经典 150 题 380 274
c++·算法·面试·职场和发展·力扣
见叶之秋7 小时前
C++基础入门指南
开发语言·c++
计算机安禾7 小时前
【c++面向对象编程】第42篇:模板特化与偏特化:为特定类型定制实现
开发语言·c++·算法
AI科技星7 小时前
哥德巴赫猜想1+1基于平行素数对等腰梯形网格拓扑与素数渐近密度的大偶数满填充完备性证明
人工智能·线性代数·架构·概率论·学习方法
浩浩测试一下7 小时前
汇编 标志位寄存器 (逆向分析 )
c语言·汇编·逆向·windows编程·标志寄存器
玖釉-7 小时前
C++ 中的循环语句详解:while、do...while、for、嵌套循环与循环控制
开发语言·c++·算法
一楼的猫8 小时前
从文本特征分析看网文平台AI检测:3个被忽视的指标
开发语言·人工智能·学习方法·ai编程·ai写作·ai自动写作