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

CMake基础语法

文章目录

  • CMake与Make的关系
  • 变量
    • 变量类型
      • 环境变量(系统层级与cmake无关)
      • cmake缓存变量
      • cmake普通变量
    • ${变量名}
    • set(<变量名> <值>)
  • cmake_minimum_required(VERSION <版本号>)
  • project(< 工程文件名 >)
  • find_package(<包名>)
  • install(TARGETS < 目标文件 > DESTINATION < 安装位置 >)
    • 安装目标文件(所有类型)
    • 安装文件夹
    • 其他
  • add_executable(<可执行文件名> <源文件列表>)
  • message( <日志类型> "<打印信息>")

CMake与Make的关系

在linux当中,其关系如下

注意:CMake本身并不提供编译工具,仅提供连接关系,也就是说仍然需要安装gcc等编译工具

变量

变量类型

环境变量(系统层级与cmake无关)

存在操作系统中,用$ENV{}访问

cmake缓存变量

缓存变量 存在 CMakeCache.txt 中(永久)
用${}访问

cmake普通变量

普通变量 只在CMake运行期间存在(临时)
用${}访问

${变量名}

这些变量可以在build目录下的CMakeCache.txt当中查看

catCMakeCache.txt|grepPROJECT_NAME

set(<变量名> <值>)

设置变量

cmake_minimum_required(VERSION <版本号>)

规定了此CMakeLists.txt所需要的最小的cmake版本

project(< 工程文件名 >)

当你写了 project(cpp05_exercise),CMake 会自动定义以下内容
基本变量
${PROJECT_NAME} # cpp05_exercise
${CMAKE_PROJECT_NAME} # cpp05_exercise
${PROJECT_SOURCE_DIR} # 源码目录路径
${PROJECT_BINARY_DIR} # 构建目录路径
如果有版本号
${PROJECT_VERSION} # 1.0.0 (如果指定了)
${PROJECT_VERSION_MAJOR} # 1
${PROJECT_VERSION_MINOR} # 0
${PROJECT_VERSION_PATCH} # 0
其他相关变量
${PROJECT_SOURCE_DIR} # 当前项目的源码目录
${PROJECT_BINARY_DIR} # 当前项目的构建目录

find_package(<包名>)

用于自动查找功能包

#1.最基本形式find_package(rclcpp)#2.必需包(找不到就报错)find_package(rclcpp REQUIRED)#3.指定版本find_package(Python33.6REQUIRED)

install(TARGETS < 目标文件 > DESTINATION < 安装位置 >)

安装目标文件(所有类型)

install(TARGETS < 目标文件 >


DESTINATION < 安装到哪里 >)

install(TARGETS demo01_talker_str demo02_listener_str demo03_talker_stu demo04_listener_stu DESTINATION lib/${PROJECT_NAME})

安装文件夹

install(DIRECTORY < 目标文件夹 >


DESTINATION < 安装到哪里 >)

install(DIRECTORY launch DESTINATION share/${PROJECT_NAME})

其他

install(FILES < file >… […])
install(SCRIPT < file > […])
install(CODE < code > […])
install(EXPORT < export-name > […])
install(RUNTIME_DEPENDENCY_SET < set-name > […])

add_executable(<可执行文件名> <源文件列表>)

添加可执行文件

add_executable(demo01_talker_str src/demo01_talker_str.cpp)

注意:一个可执行文件只能有一个main函数 (源文件列表只能有一个main,但可以增加别的被调用的cpp)
在源文件列表当中只需要包含cpp文件即可(h文件不用写在里面)

message( <日志类型> “<打印信息>”)

日志类型
STATUS:在终端会以 --(两个横线加空格)为前缀显示
WARNING:黄色警告(构建会继续)
SEND_ERROR:错误(跳过生成,但继续处理)
FATAL_ERROR:致命错误(立即终止处理)

http://www.cnnetsun.cn/news/4071256.html

相关文章:

  • 从客厅到笔记本,一篇文章玩转 Jellyfin Desktop 桌面客户端
  • 单链表算法题(二):进阶技巧篇
  • ACE项目解析:自适应上下文弹性扩展器如何解决LLM智能体上下文焦虑
  • 3分钟给《植物大战僵尸》装上免费宽屏,PvZWidescreen让画面从800宽变成1066
  • Oracle数据库核心架构解析与实战入门指南
  • 企业开箱即用 Agent 和自研 Agent 平台怎么选?——看业务标准化程度、系统复杂度与长期扩展需求
  • 第23篇:动态模板 dynamic_table:让大模型自定义表格列定义
  • LeagueAkari终极指南:免费开源英雄联盟助手,一键自动接对局、自动选英雄全解析
  • 如何用Rufus快速制作启动U盘?免费开源工具从零到精通的完整教程
  • 网盘下载总被限速?这个开源助手能生成直链免客户端下载
  • 免费视频下载工具 VidBee 体验:3 个场景让我彻底放下其他下载器
  • IDM激活脚本免费方案怎么选?三大玩法与避坑指南一次讲清
  • Conda虚拟环境全解析:从原理到实战,彻底解决Python依赖冲突
  • 嵌入式 Linux 系统移植与 SD 卡量产镜像制作
  • 免费离线语音转文字工具 TMSpeech 完整指南:把电脑声音实时变成文字
  • 移动端设备标识码全解析:从IMEI到UUID的合规实践指南
  • DTU上传数据一定要公网IP吗?
  • BBDown 快速上手指南:命令行一键下载 B 站视频,最高支持 8K 与杜比视界
  • UVa 701 The Archeologist‘s Dilemma
  • CK2dll双字节补丁快速上手全攻略:从安装到调教十字军之王II中文显示
  • 不用硬憋论文!Paperxie智能写作|专治写作空白、无思路、内容水难题
  • A06 | FMEDA 实战与故障模式:从元器件失效率到系统级 PMHF 的完整计算链
  • TIA Portal 21安装教程
  • #7、Spring AI 使用 MCP 客户端(调用高德 MCP)
  • 30 分钟把 100+ 安全工具拧成一个智能体:CyberStrikeAI 实战手记
  • AI开发回归科学:从大模型幻觉到Agent落地的工程实践指南
  • Equalizer APO 系统级音频均衡完整指南:5 个阶段从装好到玩出花样
  • 2026保研培训机构哪家靠谱?五维实力评估与择校全攻略
  • Oracle日期与字符串转换:核心函数、隐式转换陷阱与性能优化
  • Day15 unitree_G1人形机器人“身外化身”通信丢帧排查