CMAKE备忘录
目录CMake 是什么1.set()2.file() 用于 文件和目录操作1. 查找文件最常用查找 .cpp 文件递归查找2. 读取文件3. 写文件4. 复制文件5. 创建目录6. 删除文件7. 获取绝对路径常用场景自动添加源码复制配置文件常用命令总结3.add_definitionsCMake 是什么CMake、Makefile、make和gcc的关系可以理解成一个编译工程的流水线大型项目不喜欢手写 Makefile。比如 Linux 内核、Qt、OpenCV 这种项目有很多手写 Makefile 很痛苦。src/ include/ lib/ test/ third_party/简单说gcc真正负责“编译代码”的工具make负责“按照规则自动执行编译命令”Makefile告诉 make “应该怎么编译”CMake负责“生成 Makefile或者其他构建系统文件”命令作用cmake_minimum_required指定CMake版本project定义工程set定义变量add_executable生成程序add_library生成库target_include_directories添加头文件target_link_libraries链接库target_compile_options添加编译参数target_compile_definitions添加宏file文件操作find_package查找第三方库add_subdirectory添加子目录install安装if条件判断1.set()创建变量、修改变量、保存路径、保存文件列表、设置 CMake 参数等。基本格式set(变量名 值)例如set(NAME hello)表示创建变量 NAME 值为 hello使用message(${NAME})2.file()用于文件和目录操作查找源码文件创建目录复制文件读取/写入文件获取路径等基本格式file(操作 参数...)1. 查找文件最常用查找.cpp文件file( GLOB SRC *.cpp )说明GLOB → 匹配文件 SRC → 保存结果的变量 *.cpp → 查找规则使用add_executable( app ${SRC} )递归查找file( GLOB_RECURSE SRC src/*.cpp )查找src/ ├── main.cpp └── lib/test.cpp都会找到。2. 读取文件file( READ version.txt VERSION ) message(${VERSION})作用读取version.txt内容保存到变量VERSION。3. 写文件file( WRITE test.txt hello cmake )生成test.txt内容hello cmake4. 复制文件file( COPY config/ //源目录 DESTINATION //目的地 ${CMAKE_BINARY_DIR} ) //${CMAKE_BINARY_DIR} 是 CMake 固定定义的内置变量名不是你自己随便起的。 CMake 在运行时会自动创建这些变量你可以直接使用 message(${CMAKE_BINARY_DIR}) CMake 会打印当前构建目录。作用config/ | v build目录5. 创建目录file( MAKE_DIRECTORY build/log )相当于mkdir -p build/log6. 删除文件file( REMOVE test.txt )7. 获取绝对路径file( REAL_PATH ./test.txt PATH ) message(${PATH})常用场景自动添加源码file( GLOB SRC src/*.cpp ) /* file(GLOB_RECURSE SRC_User CONFIGURE_DEPENDS ${USR_DIR}/*.c ${USR_DIR}/*.h) 告诉 CMake以后如果 GLOB 查找出来的文件列表发生变化自动重新运行 CMake 配置。 它主要用于解决 file(GLOB) 自动查找源码时新文件加入的问题。 */ add_executable( app ${SRC} )复制配置文件file( COPY config.ini DESTINATION ${CMAKE_BINARY_DIR} )常用命令总结命令作用file(GLOB)查找文件file(GLOB_RECURSE)递归查找file(READ)读取文件file(WRITE)写文件file(COPY)复制文件file(MAKE_DIRECTORY)创建目录file(REMOVE)删除文件file(REAL_PATH)获取绝对路径3.add_definitionsadd_definitions(-D__ARM_ARCH_PROFILEM)等价于: gcc -DNAMEvalue add_definitions( -D宏名值 )add_definitions()没有目标名因为它是全局添加编译定义而target_compile_definitions()是针对某个 target 添加定义。现代 CMake 推荐替代# 只对指定目标添加宏 target_compile_definitions( 目标名 PRIVATE 宏名 ) 1. 目标名target 这里的目标就是你之前创建的add_executable()或者add_library()生成的东西。 例如 # 创建一个可执行程序名字叫 app add_executable( app main.cpp ) 这里app就是一个 target目标。 然后 target_compile_definitions( app PRIVATE DEBUG ) 意思给 app 这个目标添加 DEBUG 宏 等价 gcc main.cpp -DDEBUG 2. PRIVATE 是什么 PRIVATE 表示 这个宏只给当前目标使用不传递给依赖它的其他目标。例如target_compile_definitions( app PRIVATE DEBUG STM32F10X_HD )等价gcc -DDEBUG -DSTM32F10X_HD

相关新闻

申晨出席“创赢未来”创业大赛全国赛,诠释以技立身、以能致远

申晨出席“创赢未来”创业大赛全国赛,诠释以技立身、以能致远

2026年7月30日,“创赢未来”创业大赛全国赛在合肥开幕。本次大赛由人力资源社会保障部与安徽省人民政府共同主办,共吸引约2000名创业者、近600个优质项目报名参赛,是近年来全国规模最大、覆盖面最广的创业赛事之一。人力资源社会保障部党组书…

2026/10/11 22:54:59 阅读更多 →
三阶魔方七步还原法:从零基础到独立完成的完整指南

三阶魔方七步还原法:从零基础到独立完成的完整指南

1. 项目概述:为什么七步法能成为魔方入门的“金钥匙”? 如果你刚拿到一个被打乱的三阶魔方,面对花花绿绿的六个面,是不是感觉无从下手,甚至觉得这玩意儿根本不可能还原?别担心,这种感觉几乎每个…

2026/10/13 6:15:59 阅读更多 →
MIDAS GTS NX三维顶管下穿桥梁仿真分析全流程指南

MIDAS GTS NX三维顶管下穿桥梁仿真分析全流程指南

在隧道工程和城市地下空间开发中,顶管施工技术因其对地面交通和环境影响小、施工精度高等优势,越来越受到工程界的重视。然而,当顶管需要下穿既有桥梁等敏感构筑物时,施工带来的土体扰动、地层沉降以及对桥梁基础的安全影响&#…

2026/10/12 19:34:26 阅读更多 →

最新新闻

以太坊幽灵交易根因与Nonce管理实战:从卡死到自动化防护

以太坊幽灵交易根因与Nonce管理实战:从卡死到自动化防护

凌晨三点十七分,监控大屏的告警把值班手机震醒。点开一看,某资金归集服务最近的链上交易数为零,进程却还活着,日志里没有任何异常。刷新区块浏览器,交易列表躺着一串 pending,确认数全是零。再往下翻&#…

2026/10/13 10:39:24 阅读更多 →
网页 window.open 连点两次为什么串到同一个窗口:HarmonyOS 7 ArkWeb name 路由怎么防重入

网页 window.open 连点两次为什么串到同一个窗口:HarmonyOS 7 ArkWeb name 路由怎么防重入

网页 window.open 连点两次为什么串到同一个窗口:HarmonyOS 7 ArkWeb name 路由怎么防重入 网页连续两次调用 window.open(url, "preview"),应用侧创建了两个窗口,但后一次内容跑进前一个窗口;关闭其中一个后&#xff…

2026/10/13 10:39:24 阅读更多 →
大鹿岛:一座海岛如何把森林、海蚀礁石与岩雕叠在一起

大鹿岛:一座海岛如何把森林、海蚀礁石与岩雕叠在一起

第一次听到“大鹿岛”这个名字,是在台州朋友的饭桌上。他说那座岛上的石头会讲故事,我当时觉得他在夸张——海岛见得多了,无非是沙滩、海鲜、海风,石头能有什么稀奇。真正登岛是第二年初秋,船从玉环一侧开出去&#xf…

2026/10/13 10:39:24 阅读更多 →
多语言语义检索实战:paraphrase-multilingual-MiniLM-L12-v2 选型、调参与微调

多语言语义检索实战:paraphrase-multilingual-MiniLM-L12-v2 选型、调参与微调

简介:这份资源是 sentence-transformers 库中 paraphrase-multilingual-MiniLM-L12-v2 模型的本地化压缩包,面向从事自然语言处理、语义搜索与文本聚类的中高级开发者。模型可将句子和段落映射到 384 维密集向量空间,适用于多语言语义检索、相…

2026/10/13 10:39:24 阅读更多 →
两数相加链表题全解析:从哨兵节点到进位处理的面试指南

两数相加链表题全解析:从哨兵节点到进位处理的面试指南

1. 题目拆解与核心思路:这道题到底在考什么 “两数相加”在 LeetCode 热题 100 里属于链表章节的入门题,但如果你只把它当成“模拟加法”来做,面试会吃亏。 先看题面:给你两个非空的链表,每个节点存一个数字&#xff…

2026/10/13 10:39:24 阅读更多 →
Nacos配置中心中文乱码怎么办?SpringBoot环境UTF-8编码配置指南

Nacos配置中心中文乱码怎么办?SpringBoot环境UTF-8编码配置指南

搞微服务的同学,不管在哪个团队,迟早会在Nacos配置中心里碰上一次乱码。我这两年接到过不少工单,报的都是同一个毛病:本地启动一切正常,一到测试或生产环境,前端拿到的中文全变成问号,或者日志里…

2026/10/13 10:38:24 阅读更多 →

日新闻

物联网系统集成避坑指南:从选型到验收的关键要点

物联网系统集成避坑指南:从选型到验收的关键要点

做了这么多年物联网系统集成的项目,我最大的感受是,大部分坑不是出在技术前沿,而是出在一些看起来很平常的地方。设备选了便宜的、协议没问清楚、现场没摸透、验收标准写得含糊——这些细枝末节,最后都会变成延期、超支和扯皮的大…

2026/10/13 0:00:57 阅读更多 →
ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

如果你玩ESP32有一阵子了,很难不碰到舵机控制这道坎。做智能小车要转方向,做机械臂要抬关节,做云台要偏航俯仰,背后都是同一个东西在干活:舵机。而我见过太多人卡在“代码能编译、舵机就是不听话”这个阶段&#xff0c…

2026/10/13 0:00:57 阅读更多 →
CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

1. 为什么CAN总线至今仍是工业现场的“硬通货”?——从汽车底盘到智能温室的真实需求你有没有拆过一辆老款燃油车的中控台?或者调试过某高校实验室里那台跑着Modbus协议却频频丢帧的PLC控制柜?又或者,在某个农业物联网项目里&…

2026/10/13 0:00:57 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/13 2:54:56 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/12 0:16:38 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/13 1:58:08 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 21:05:09 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 14:48:49 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 18:11:17 阅读更多 →