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

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

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

2026/11/13 18:21:35 阅读更多 →
MIDAS GTS NX三维顶管下穿桥梁仿真分析全流程指南

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

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

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

最新新闻

Electron桌面应用开发实战:从环境搭建到打包发布全流程

Electron桌面应用开发实战:从环境搭建到打包发布全流程

做前端这些年,我大部分时间都在跟浏览器标签页打交道,直到第一次把桌面应用跑起来,才发现原来自己一直被限制在地址栏和刷新按钮围起来的框框里。Electron这个词,最开始是在某段时间频繁出现在同事的讨论里,一个用HTML…

2026/11/13 5:13:25 阅读更多 →
滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

简介:亚太天能T109滑盖智能锁产品说明书是一份PDF格式的官方技术文档,主要面向智能锁安装人员、终端用户及售后维护者,帮助快速掌握产品安装、配置与常见故障处理。全包仅1个PDF文件,大小4.37MB,内容结构清晰&#xff…

2026/11/13 5:13:25 阅读更多 →
PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

上个月我在调试一台高速AGV的驱动系统,整车要求空载跑到8m/s,电机转速已经拉到额定点,驱动器的输出电压也顶到了母线电压极限附近。再往上踩速度指令,转速纹丝不动,三相电流反而开始震荡。那会儿我的第一反应就是&…

2026/11/13 5:13:25 阅读更多 →
C++核心知识点:从内存管理到STL的实战指南

C++核心知识点:从内存管理到STL的实战指南

C 这门语言我前前后后折腾了十几年,用它写过嵌入式驱动、做过游戏服务端,也搭过基础组件库。每次看到新人一头扎进"C 核心知识点"这个搜索词,我其实挺感慨的——这门语言的难点从来不是语法多,而是知识点之间的耦合太深…

2026/11/12 18:22:26 阅读更多 →
T109滑盖智能锁怎么装?安装调试与故障排查全攻略

T109滑盖智能锁怎么装?安装调试与故障排查全攻略

简介:亚太天能T109滑盖智能锁产品说明书以PDF格式发布,适合智能锁用户、安装人员与售后维修人员阅读。内容围绕T109系列指纹密码刷卡锁展开,先介绍前面板、后面板、锁体、机械钥匙、电池盒盖等部件名称与功能,再给出完整安装步骤&…

2026/11/12 18:22:25 阅读更多 →
LLM知识降熵:从信息垄断到理解权下放

LLM知识降熵:从信息垄断到理解权下放

你有没有过这种经历:翻开源码注释、论文摘要或者一份专业报告,每个字都认识,连在一起却像天书。想找人聊聊,身边要么没人懂,要么懂的懒得跟你解释。后来我试着把同一段内容丢给一个大语言模型,几秒钟之后&a…

2026/11/13 5:13:25 阅读更多 →

日新闻

周新闻

月新闻