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

感谢支持,长期连载

欢迎关注

相关推荐
2601_966871405 分钟前
全新 云原生系统精讲与全流程落地实践,云原生 DevOpS 进阶实战营
运维·云原生·devops
桌面运维家6 分钟前
信创机房批量换国产终端,服务器IO通道配置实测体验
运维·服务器
IT小白杨11 分钟前
多账号运营为什么需要独立浏览器环境:原理、机制与自测方法
服务器·chrome·经验分享·安全架构·指纹浏览器
qq_3494479513 分钟前
Helm自定义chart,以及常用命令
运维
志栋智能15 分钟前
告警来袭?超自动化3分钟精准定界故障根因
运维·自动化
ai_coder_ai16 分钟前
pc浏览器网页如何实现自动化操作
运维·自动化
前端炒粉20 分钟前
fetch+readablestream(Streamable)流式输出
java·服务器·前端
FORCECON122 分钟前
力控SCADA工程升级:信创跨平台迁移方案,快速搭建安全自主的工业监控系统
linux·windows·自动化·信创·scada·监控组态软件
小义_26 分钟前
Linux 性能排查实战
linux·服务器·php
略略略咯咯39 分钟前
jenkins
运维·servlet·jenkins