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

CMake语法与Bash语法的区别

CMake语法与Bash语法的区别

CMake使用的不是Bash语法,而是一种专门设计的脚本语言。虽然两者有一些相似之处(比如变量使用${}进行引用),但它们是不同的语言体系。

主要区别

特性CMake语法Bash语法
语言类型构建系统配置语言Unix shell脚本语言
变量引用${VAR}$ENV{VAR}$VAR${VAR}
字符串比较if(VAR STREQUAL "value")if [ "$VAR" = "value" ]; then
列表表示set(MY_LIST a b c)MY_LIST=("a" "b" "c")
函数定义function(my_func)my_func() { ... }
命令执行execute_process(COMMAND cmd)直接执行命令或使用反引号/$()
注释# 注释# 注释

CMake特有的语法元素

  1. 命令调用

    command_name(arg1 arg2)  # 不需要空格分隔
    
  2. 条件语句

    if(condition)# ...
    elseif(another_condition)# ...
    else()# ...
    endif()
    
  3. 循环

    foreach(item IN LISTS my_list)message(STATUS "Item: ${item}")
    endforeach()
    
  4. 特殊变量

    • CMAKE_CURRENT_SOURCE_DIR - 当前处理的CMakeLists.txt所在目录
    • PROJECT_SOURCE_DIR - 项目根目录

相似之处

  1. 变量扩展:都使用${}语法(但CMake更严格)
  2. 注释符号:都使用#
  3. 基本逻辑结构:都有if/else/foreach等控制结构

重要注意事项

  • 空格敏感:CMake命令名和括号之间不能有空格

    message ("Hello")  # 错误 - 括号前有空格
    message("Hello")   # 正确
    
  • 参数分隔:CMake参数用空格分隔,不像Bash可以用引号分组

    set(SOURCES "a.cpp" "b.cpp")  # 正确
    set(SOURCES a.cpp b.cpp)      # 也正确
    
  • 环境变量访问:需要特殊语法

    $ENV{PATH}  # CMake访问环境变量PATH
    

理解这些区别对于正确编写CMake脚本非常重要,特别是当你有Bash背景时,需要避免将Bash的习惯带入CMake脚本编写中。

http://www.dtcms.com/a/330989.html

相关文章:

  • 解剖HashMap的put <三> JDK1.8
  • 会议系统进程池管理:初始化、通信与状态同步详解
  • 从 Notion 的水土不服到 Codes 的本土突围:研发管理工具的适性之道​
  • Apache 虚拟主机配置冲突导致 404 错误的排查总结
  • [机器学习]08-基于逻辑回归模型的鸢尾花数据集分类
  • AXI GPIO 2——ZYNQ学习笔记
  • 力扣top100(day03-02)--图论
  • Java 技术栈中间件优雅停机方案设计与实现全景图
  • 【JavaEE】多线程 -- 线程状态
  • 数据结构之顺序表相关算法题
  • 【数据分享】351个地级市农业相关数据(2013-2022)-有缺失值
  • linux中date命令
  • SAP-ABAP:SAP消息系统深度解析:架构设计与企业级应用实践
  • Wireshark中捕获的大量UDP数据
  • 23.Linux : ftp服务及配置详解
  • (论文速读)DiffusionDet - 扩散模型在目标检测中的开创性应用
  • AI搜索重构下的GEO优化服务商格局观察
  • 李沐-第六章-LeNet训练中的pycharm jupyter-notebook Animator类的显示问题
  • 轻松同步 Outlook 联系人到 Android
  • 深入解析SAE自动驾驶分级标准(0-5级)及典型落地实例
  • Ubuntu 软件源版本不匹配导致的依赖冲突问题及解决方法
  • C++ 23种设计模式的分类总结
  • C++23输出革命:std::print的崛起与工业界标准滞后的现实困境
  • 18.12 BERT问答系统核心难题:3步攻克Tokenizer答案定位与动态填充实战
  • c/c++ UNIX 域Socket和共享内存实现本机通信
  • 2021睿抗决赛 猛犸不上 Ban
  • diffusers库学习--pipeline,模型,调度器的基础使用
  • 深入解析Prompt缓存机制:原理、优化与实践经验
  • Centos9傻瓜式linux部署CRMEB 开源商城系统(PHP)
  • 流式数据服务端怎么传给前端,前端怎么接收?