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

CMake函数参数

在 CMake 中,当定义一个函数时,会自动创建一些特殊的变量来处理函数的参数,下面分别介绍 ARGNARGCARGVARGV0ARGV1 等变量的含义,并给出相应的示例。

各变量含义

  1. ARGC

    • 含义:表示传递给函数的参数的数量。它是一个整数,反映了调用函数时提供的参数个数。
  2. ARGV

    • 含义:是一个包含所有传递给函数的参数的列表。列表中的元素顺序与参数传递的顺序一致。
  3. ARGV0ARGV1ARGV2

    • 含义:分别表示传递给函数的第 0 个、第 1 个、第 2 个 … 参数。索引从 0 开始,ARGV0 就是第一个传递的参数,ARGV1 是第二个传递的参数,依此类推。
  4. ARGN

    • 含义:当函数定义时指定了参数名,ARGN 包含除了这些指定参数之外的所有额外参数。如果函数定义时没有指定参数名,ARGN 就等同于 ARGV

示例代码

# 定义一个函数,演示参数变量的使用
function(demo_function arg1 arg2)
    # 输出参数数量
    message("ARGC: ${ARGC}")

    # 输出所有参数的列表
    message("ARGV: ${ARGV}")

    # 输出第一个和第二个参数
    message("ARGV0: ${ARGV0}")
    message("ARGV1: ${ARGV1}")

    # 输出额外的参数(如果有)
    if(ARGN)
        message("ARGN: ${ARGN}")
    else()
        message("No additional arguments (ARGN is empty).")
    endif()
endfunction()

# 调用函数,传递两个参数
demo_function("param1" "param2")

# 调用函数,传递四个参数
demo_function("param1" "param2" "extra1" "extra2")

代码解释

  1. 函数定义demo_function 函数定义了两个参数 arg1arg2

  2. 第一次调用demo_function("param1" "param2")

    • ARGC 的值为 2,因为传递了两个参数。
    • ARGV 是一个包含 "param1""param2" 的列表。
    • ARGV0"param1"ARGV1"param2"
    • 由于没有额外的参数,ARGN 为空。
  3. 第二次调用demo_function("param1" "param2" "extra1" "extra2")

    • ARGC 的值为 4,因为传递了四个参数。
    • ARGV 是一个包含 "param1""param2""extra1""extra2" 的列表。
    • ARGV0"param1"ARGV1"param2"
    • ARGN 是一个包含 "extra1""extra2" 的列表,即除了函数定义的 arg1arg2 之外的额外参数。

通过这个示例,你可以清楚地看到这些特殊变量在处理函数参数时的具体作用。


http://www.kler.cn/a/517512.html

相关文章:

  • impact 影响分析学习笔记(一)
  • 检测到联想鼠标自动调出运行窗口,鼠标自己作为键盘操作
  • Linux第一讲--基本的命令操作
  • pytest自动化测试 - 构造“预置条件”的几种方式
  • Spring中的事务管理器TransactionManager
  • 双目立体校正和Q矩阵
  • 前端【8】HTML+CSS+javascript实战项目----实现一个简单的待办事项列表 (To-Do List)
  • MUSE: PARALLEL MULTI-SCALE ATTENTION FOR SEQUENCE TO SEQUENCE LEARNING 笔记
  • Go语言中变量在栈和堆上分配情况分析
  • 论文:深度可分离神经网络存内计算处理芯片
  • [MySQL]数据库表内容的增删查改操作大全
  • Word 中实现方框内点击自动打 √ ☑
  • -bash: ./uninstall.command: /bin/sh^M: 坏的解释器: 没有那个文件或目录
  • Kotlin泛型学习篇
  • 机器学习-线性回归(参数估计之经验风险最小化)
  • Hive之加载csv格式数据到hive
  • 设计模式的艺术-命令模式
  • 嵌入式知识点总结 ARM体系与架构 专题提升(四)-编程
  • 【Java】阿里云OSS上传、删除文件
  • git基础使用命令
  • YOLOv10-1.1部分代码阅读笔记-val.py
  • 《罗宾逊-旅途VR》Build2108907官方学习版
  • Oracle 机器宕机之后启动数据库
  • 大数据,Hadoop,HDFS的简单介绍
  • 从根源分析,调试,定位和解决MacOS ld: unsupported tapi file type ‘!tapi-tbd‘ in YAML file
  • Leecode刷题C语言之购买水果需要的最小金币数