当前位置: 首页 > 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.lryc.cn/news/621230.html

相关文章:

  • 扩展用例-失败的嵌套
  • 流式数据服务端怎么传给前端,前端怎么接收?
  • jenkins在windows配置sshpass
  • 设计模式笔记_行为型_状态模式
  • 【JavaEE】多线程 -- 线程状态
  • 纸箱拆垛:物流自动化中的“开箱密码”与3D视觉的智能革命
  • 面试题之项目中灰度发布是怎么做的
  • Flink on YARN启动全流程深度解析
  • 会议通信系统核心流程详解(底稿1)
  • Linux软件编程:进程和线程
  • C#面试题及详细答案120道(01-10)-- 基础语法与数据类型
  • Flink Stream API 源码走读 - socketTextStream
  • 2025H1手游市场:SLG领涨、休闲爆发,何为出海新航道?
  • 广告灯的左移右移
  • Day43 复习日
  • FPGA+护理:跨学科发展的探索(五)
  • Kotlin Data Classes 快速上手
  • 【深度学习】深度学习基础概念与初识PyTorch
  • 报数游戏(我将每文更新tips)
  • IPTV系统:开启视听与管理的全新篇章
  • 14 ABP Framework 文档管理
  • 【软考中级网络工程师】知识点之入侵防御系统:筑牢网络安全防线
  • SpringMVC(详细版从入门到精通)未完
  • P5967 [POI 2016] Korale 题解
  • 【数据分享】2014-2023年长江流域 (0.05度)5.5km分辨率的每小时日光诱导叶绿素荧光SIF数据
  • stm32项目(28)——基于stm32的环境监测并上传至onenet云平台
  • LT3045EDD#TRPBF ADI亚德诺 超低噪声LDO稳压器 电子元器件IC
  • web网站开发,在线%射击比赛成绩管理%系统开发demo,基于html,css,jquery,python,django,model,orm,mysql数据库
  • 模型选择与调优
  • 0814 TCP和DUP通信协议