CMake第一章——1.0CMake命令行,拉取源码、平台兼容的门槛技术。

@bit::Shadow
✧(≖ ◡ ≖✿

目录

学CMake为什么"有必要"?(三个现实原因)

CMakeLists.txt构建

文件创建

内容构建

最低版本号(必做)

设置项目名字(必做,最直观,但最不重要)

设置构建目标(必做)

终端执行CMakeLists.txt

[cmake .生成的文件们](#cmake .生成的文件们)

CMakeFiles文件夹(临时文件仓库,最庞大但最不关心)

CMakeCache.txt(缓存文件,故障排查)

执行make

运行.exe


学CMake为什么"有必要"?(三个现实原因)

  • 行业硬门槛(逃不掉) :GitHub上绝大多数C++项目(如LLVM、OpenCV、TensorFlow)都用CMake构建。如果你想阅读源码、给项目提PR,或者在公司接手遗留代码,第一关就是看懂CMakeLists.txt。看不懂,连项目都打不开,更别说修改了。

  • 跨平台的"翻译官" :你的代码可能在Windows(VS)、Linux(Make)、macOS(Xcode)上跑。CMake不是编译器,而是生成器 ------它根据不同平台生成对应的构建文件。你只需要写一次CMakeLists.txt,就能在所有主流IDE里打开,这极大节省了配环境的时间。

  • 依赖管理(现代C++的刚需) :C++没有官方的包管理器,但现代CMake(3.15+)的find_packageFetchContent功能,能让你像写Python的pip一样引入第三方库(比如fmt、spdlog、OpenCV)。不用CMake的话,手动配置包含路径和链接库会非常繁琐。

CMake版本号 3.22.1

CMakeLists.txt构建

目标文件以test.cc为例

cpp 复制代码
#include <iostream>
#include<unistd.h>
int main() 
{
    for (int i = 1; i < 4; i++) 
    {
        sleep(1);
        std::cout << i << std::endl;
    }
    return 0;
}

文件创建

命名:规范命名是CMakeLists.txt 。(C M L可大小写切换但是后缀"s"必带)

内容构建

基本分为三部分

bash 复制代码
#cmake
# 1 限制最低版本号
cmake_minimum_required(VERSION 3.18) #没有"句号"
# 2 设置项目名称
project(FirstProjext) 
# 3 设置构建目标
add_executable(pc test.cc)

最低版本号(必做)

cmake_minimum_required()

低于版本号不行(报错),大于等于才可以构建。

设置项目名字(必做,最直观,但最不重要)

project()

  • 作用 :设置PROJECT_NAME变量,方便你在日志或输出文件中引用。

  • 例子message("Building ${PROJECT_NAME} version ${PROJECT_VERSION}") 会输出 "Building MyApp version 1.0.0"。

  • 价值 :如果你的项目有多个子模块,用PROJECT_NAME做前缀生成输出文件(如${PROJECT_NAME}.exe),避免硬编码。

设置构建目标(必做)

add_executable()

类似于可变参数,第一部分是生成目标,第二部分是依赖对象test.cc

终端执行CMakeLists.txt

cmake .形成的文件图

cmake .生成的文件们

CMakeFiles文件夹(临时文件仓库,最庞大但最不关心)
  • 它是什么 :一个**"杂物间"**,里面包含:

    • 每个源文件的编译依赖信息(.d文件)

    • 编译时的临时.o文件(在某些子目录)

    • CMake内部的状态文件(比如CMakeOutput.logCMakeError.log用于记录探测过程)

  • 你的任务你永远不需要手动翻这个文件夹。不过有两个小技巧:

    • 如果编译报错提示"找不到头文件",可以翻一下里面的CMakeError.log,看CMake在探测系统库时遇到了什么错误(高级调试)。

    • 清理构建时,直接删除整个CMakeFiles文件夹和CMakeCache.txt,比手动挑文件快得多。

CMakeCache.txt(缓存文件,故障排查)

功能:存储探测编译系统内容属性等、重复执行cmake .检测此缓冲文件适当更改原先cmake .形成的框架内的文件内容。

什么时候需要手动操作:从Debug切换到Release,解决"编译时"的90%诡异问题(删除该缓存文件后重新生成)。

cmake_install.cmake(安装脚本)

执行安装相关命令(例如指令:make install)

若删除部分cmake生成的文件再次cmake .就会重新生成其中CMakeCache就起到了缓存作用提高效率。

删除Makefile后,重新构建:

执行make

运行.exe

感谢支持,长期连载

欢迎关注

相关推荐
qetfw1 小时前
Debian Apache2 执行 Shell CGI:动态时间页面配置与验证
linux·运维·debian
呱呱巨基1 小时前
CMake基础
linux·c++·笔记·学习
DLYSB_10 小时前
存储运维实战:基于 Ceph Event 监听与 Python 适配器的分布式存储健康度物理声光响应架构
运维·ceph·python·报警灯
爱丶狸10 小时前
Grafana_Zabbix_ImageRenderer_部署与前端操作手册
linux·前端·zabbix·grafana·kylin
阿里云云原生11 小时前
可用性从 99.9% 跃升至 99.995%:畅捷通如何用 AI 重塑运维底座?
运维·网络·人工智能
k4m7v2pz12 小时前
把 Bevy 0.14 游戏移植到 R36S 掌机:一场与“无窗口系统“的搏斗
linux·rust·bevy·r36s·rk3326·开源掌机
阿童木写作12 小时前
Python实现Temu图片批量翻译自动化教程
运维·人工智能·python·自动化
iori97king13 小时前
库存不足自动通知:第一次使用自动化
运维·自动化
@insist12313 小时前
信息系统管理工程师-信息系统运维资源、技术与智能运维核心考点解析
运维·软考·信管·软件水平考试·信息系统管理工程师