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_package和FetchContent功能,能让你像写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.log和CMakeError.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

感谢支持,长期连载

欢迎关注

相关推荐
Ruiery1 小时前
Linux 6.6内核 CPU 深度解析(七):调度器启动 — 从单核到多核,调度器分阶段点亮
linux·运维·服务器
50万马克的面包1 小时前
CSDN-栈队列数组-知识点整理
linux·运维·服务器
MicrosoftCloud2 小时前
用户权限 04|/etc/sudoers 安全配置:从最小授权到「别把 ALL 随便给人」
运维·安全·ubuntu·sudo·sudoers
wjkjpcba3 小时前
PCBA烧录程序是什么:PCBA包工包料厂家解析烧录与测试
linux·数据库·人工智能·smt贴片加工·pcba贴片加工厂
꯭自꯭闭꯭3 小时前
达梦事物特性及MVCC
linux·运维·数据库
91刘仁德4 小时前
HTTP协议详解:从URL到HTTP服务器的完整实战
服务器·网络·笔记·网络协议·http
亚川楼宇自控系统数据中心厂家5 小时前
实验室智能化管理系统|人环物智一体化管控平台
运维
羔羊++5 小时前
18_实验十七_其他命令与自定义启动变量
linux
zmsup6 小时前
Agent 上下文调优:结合 OpsArk 运维智能体,设计模型每一步真正需要的信息
运维·agent·上下文压缩·运维智能体·上下文调优
DYWorker0017 小时前
Linux驱动:RK3568 GMAC + YT8531C 千兆以太网全流程解剖
linux