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/8/1 11:31:05 阅读更多 →
三阶魔方七步还原法:从零基础到独立完成的完整指南

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

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

2026/8/1 11:31:05 阅读更多 →
MIDAS GTS NX三维顶管下穿桥梁仿真分析全流程指南

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

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

2026/8/1 11:31:05 阅读更多 →

最新新闻

Jetson边缘计算实战:基于TensorRT优化的实时语音识别与字幕生成

Jetson边缘计算实战:基于TensorRT优化的实时语音识别与字幕生成

1. 项目缘起:为什么要在Jetson上做语音字幕生成?最近在折腾一个边缘计算项目,需要把会议或直播的实时音频流,转换成文字字幕,直接叠加到视频流里。一开始想着用云端API,比如调用大厂的语音识别服务&#xf…

2026/8/1 12:24:23 阅读更多 →
高管凌晨三点要的洞察,AI在117秒内交付:高并发问卷流式分析架构设计(含Prometheus监控看板与SLA保障协议)

高管凌晨三点要的洞察,AI在117秒内交付:高并发问卷流式分析架构设计(含Prometheus监控看板与SLA保障协议)

更多请点击: https://intelliparadigm.com 第一章:高管凌晨三点要的洞察,AI在117秒内交付:高并发问卷流式分析架构设计(含Prometheus监控看板与SLA保障协议) 当业务部门在凌晨三点提交“全量用户NPS趋势细…

2026/8/1 12:24:23 阅读更多 →
Python模块:内置模块collections数据结构扩展

Python模块:内置模块collections数据结构扩展

Python模块:内置模块collections数据结构扩展一、开篇:标准容器的升级版 Python内置的list、dict、tuple、set已经很强大,但有时你需要更专业的工具。collections模块提供了这些"高级容器"——namedtuple让元组有名字,d…

2026/8/1 12:24:23 阅读更多 →
AXI协议BURST机制深度解析:从原理到实战的性能优化指南

AXI协议BURST机制深度解析:从原理到实战的性能优化指南

1. 项目概述:为什么BURST是AXI协议的灵魂在数字芯片设计,尤其是SoC(片上系统)互联领域,AXI(Advanced eXtensible Interface)协议是当之无愧的“顶流”。无论是连接处理器核心与高速缓存&#xf…

2026/8/1 12:24:23 阅读更多 →
如何快速批量重命名阿里云盘文件:终极免费工具指南

如何快速批量重命名阿里云盘文件:终极免费工具指南

如何快速批量重命名阿里云盘文件:终极免费工具指南 【免费下载链接】aliyundrive-batch-rename 阿里云盘网页端批量重命名的油猴脚本 项目地址: https://gitcode.com/gh_mirrors/al/aliyundrive-batch-rename 还在为阿里云盘里杂乱无章的文件名而烦恼吗&…

2026/8/1 12:24:23 阅读更多 →
基于LCU API的模块化自动化框架:League Akari架构解析与深度定制指南

基于LCU API的模块化自动化框架:League Akari架构解析与深度定制指南

基于LCU API的模块化自动化框架:League Akari架构解析与深度定制指南 【免费下载链接】League-Toolkit An all-in-one toolkit for LeagueClient. Gathering power 🚀. 项目地址: https://gitcode.com/gh_mirrors/le/League-Toolkit League Akari…

2026/8/1 12:23:23 阅读更多 →

日新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/1 0:00:48 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/1 0:00:48 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/1 0:00:48 阅读更多 →

周新闻

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 数据集6000张 完整源码已标注数据集训练好的模型环境配置教程程序运行说明文档,可以直接使用!系统支持图片、视频、摄像头等多种方式检测裂缝,功能强大实用。 1数据集6000张 8各类别

2026/7/31 1:03:03 阅读更多 →
深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

pubg数据集 精选原图1.42万数据 1.49万标签 无任何重复、算法增强或冗余图像! pubg绝地求生目标检测数据集 1分类:e_body,14905个标签,txt格式 共计14244张图,99%为640*640尺寸图像 适合yolo目标检测、AI训练关键词&am…

2026/8/1 5:19:34 阅读更多 →
Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex检测数据集数据集详情检测类别: allies enemy tag图片总量:7247张训练集:5139张验证集:1425张测试集:683张标注状态:全部已标注,即拿即用数据格式:支持YOLO格式及其他格式&#…

2026/8/1 10:33:33 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/1 0:00:48 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/1 0:00:48 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/1 0:00:48 阅读更多 →