当前位置: 首页 > news >正文

CMAKE备忘录

目录

CMake 是什么?

1.set()

2.file() 用于 文件和目录操作

1. 查找文件(最常用)

查找 .cpp 文件

递归查找

2. 读取文件

3. 写文件

4. 复制文件

5. 创建目录

6. 删除文件

7. 获取绝对路径

常用场景

自动添加源码

复制配置文件

常用命令总结

3.add_definitions


CMake 是什么?

CMakeMakefilemakegcc的关系,可以理解成一个编译工程的流水线:

大型项目不喜欢手写 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 cmake

4. 复制文件

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/log

6. 删除文件

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_definitions

add_definitions(-D__ARM_ARCH_PROFILE='M'),等价于: gcc -DNAME=value 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
http://www.jsqmd.com/news/1306618/

相关文章:

  • 上海家长血泪经验!孩子配镜别乱花钱,这几个坑千万别踩 - 林州鸿途网络
  • 上海欧萨卡金属集团:N08367制造厂哪家技术强?2026年用户力荐 - 工业推荐榜
  • 支付逻辑漏洞攻防实战:从参数篡改到算法溢出的安全防御体系
  • 户外储能(便携储能 / 移动电源)老化测试系统厂家推荐 - 资讯分享168
  • 机房UPS电源采购避坑与选型全解析
  • 黑龙江公专融合宽窄带通信系统搭建、寒地协同调度难点与标准化工程落地科普
  • 博罗县上班没大块时间?惠州职场人用研学旅游指导师证把碎片时间变成专业加分 - 实时教育培训动态
  • 项目报告说要就要,业务部门那些还不清的人情债
  • 从COBOL到LLM微服务的跨代迁移实录(含银行核心系统迁移日志):17天完成210万行代码安全迁移
  • 如何选择适合的热封胶以满足包装需求?
  • 孝感汇慧星链精准广告投放 孝感汇慧星链腾讯生态广告 汇慧星链同城广告精准获客 汇慧星链低成本广告拓客 汇慧星链腾讯广告精准投放 - GrowUME
  • ESP32-S3驱动2.8寸LCD屏实战:从8080接口到LVGL UI全解析
  • 2026年8月广东太阳能智慧路灯/园林照明工程供应商地址整理|电话、时间与到店准备|2026年8月1日资料更新 - mobible
  • 2026年长沙口腔专业学校优选参考指南:理性选择,聚焦培养实力 - 优质品牌商家
  • WiFi/蓝牙/PLC模组行业2026痛点深度解析:涨价潮、FCC禁令、技术瓶颈,模组方案商如何穿越周期?
  • 工业离心机选型与应用全指南:苏州星亿立式,卧式全系列设备技术参数、场景方案及落地实证 - 趣闻早乐评
  • W214奔驰E级常见升级项目及避坑指南
  • 城南管道疏通公司推荐,下水道疏通公司哪家好怎么选不踩坑?2026避坑指南+靠谱公司推荐 - mobible
  • 黑龙江野外林区、边境地带电磁干扰溯源排查方法与无线电环境优化科普
  • Matlab实现排列熵算法:原理、优化与应用
  • 5秒极速备份:B站缓存视频无损转换MP4的完整解决方案
  • IMX290星光级传感器驱动与图像调优实战:从MIPI CSI-2接口到低照度优化
  • 2026年8月,青岛到宁波物流公司有何独特之处?快来一探究竟! - GrowUME
  • ELISPOT实验全流程解析:从原理到实操的细胞免疫检测技术
  • 2026宠物冻干零食包袋工厂实力口碑榜,避坑攻略一看就懂 - 工业推荐榜
  • Windows平台Mifare Classic工具终极指南:告别命令行,轻松管理NFC卡片
  • Godot AI助手插件开发指南:集成LLM提升游戏开发效率
  • UE4/UE5 Pak文件分析利器:UnrealPakViewer核心功能与实战指南
  • CSB1-N10 评测:1U 机架塞进 10 个计算节点,最高 1570TOPS 的边缘算力服务器
  • 想找新南威尔士大学的留学中介,哪些品牌值得放进候选清单? - GrowUME