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

CMake function使用

在 CMake 中,function 用于定义一个可复用的代码块,可以在 CMake 脚本中多次调用。它类似于其他编程语言中的函数。函数内的变量默认是局部的,不会影响外部的变量,除非显式地使用 PARENT_SCOPE 来修改父级作用域中的变量。

基本语法

function(<name> [arg1 arg2 ...])# Function body
endfunction()
  • <name>: 函数名。
  • [arg1 arg2 ...]: 函数的参数,可以是零个或多个。
  • 函数体: 包含要执行的 CMake 命令。

示例 1:定义一个简单的函数

cmake_minimum_required(VERSION 3.10)
project(MyProject)# 定义一个打印消息的函数
function(print_message message)message(STATUS "Message: ${message}")
endfunction()# 调用函数
print_message("Hello, CMake!")

在这个例子中,我们定义了一个名为 print_message 的函数,它接收一个参数 message,然后打印出来。当调用 print_message("Hello, CMake!") 时,CMake 会输出 Message: Hello, CMake!

示例 2:函数内修改变量的作用域

cmake_minimum_required(VERSION 3.10)
project(MyProject)# 定义一个修改变量值的函数
function(change_variable)set(MY_VAR "Modified Inside Function")
endfunction()# 调用函数之前
message(STATUS "MY_VAR before: ${MY_VAR}")# 调用函数
change_variable()# 调用函数之后
message(STATUS "MY_VAR after: ${MY_VAR}")

在这个例子中,MY_VAR 在函数内部被修改,但由于函数内的变量是局部的,函数外部的 MY_VAR 不受影响,输出将会是:

MY_VAR before: 
MY_VAR after: 

示例 3:使用 PARENT_SCOPE 修改父级作用域中的变量

如果你想在函数内修改外部作用域中的变量,可以使用 PARENT_SCOPE

cmake_minimum_required(VERSION 3.10)
project(MyProject)# 定义一个修改父级作用域中变量的函数
function(change_variable_in_parent_scope)set(MY_VAR "Modified in Parent Scope" PARENT_SCOPE)
endfunction()# 调用函数之前
message(STATUS "MY_VAR before: ${MY_VAR}")# 调用函数
change_variable_in_parent_scope()# 调用函数之后
message(STATUS "MY_VAR after: ${MY_VAR}")

在这个例子中,函数 change_variable_in_parent_scope 修改了 MY_VAR,并使用 PARENT_SCOPE 将更改传递到父级作用域。输出将会是:

MY_VAR before: 
MY_VAR after: Modified in Parent Scope

示例 4:函数返回值

CMake 的 function 本身并没有返回值的概念,但可以通过设置一个变量来模拟返回值:

cmake_minimum_required(VERSION 3.10)
project(MyProject)# 定义一个模拟返回值的函数
function(get_square value)math(EXPR result "${value} * ${value}")set(${ARGV0} ${result} PARENT_SCOPE)  # 将结果传递给父级作用域的变量
endfunction()# 调用函数并获取结果
get_square(4 RESULT)# 打印结果
message(STATUS "Square of 4 is: ${RESULT}")

在这个例子中,函数 get_square 接收一个数字并计算其平方,然后通过 PARENT_SCOPE 将结果返回。结果会被赋值给变量 RESULT,并在输出中显示 Square of 4 is: 16

示例 5:函数内的多参数

CMake 的函数可以接收多个参数。你可以通过 ARGN 访问所有的附加参数:

cmake_minimum_required(VERSION 3.10)
project(MyProject)# 定义一个接收多个参数的函数
function(print_all_args)message(STATUS "Number of arguments: ${ARGC}")foreach(arg IN LISTS ARGN)message(STATUS "Argument: ${arg}")endforeach()
endfunction()# 调用函数
print_all_args("Hello" "CMake" "Function" "Example")

输出会是:

Number of arguments: 4
Argument: Hello
Argument: CMake
Argument: Function
Argument: Example

小结

  1. 基本使用: function 用于定义一个可复用的代码块。
  2. 变量作用域: 默认情况下,函数内部的变量是局部的,使用 PARENT_SCOPE 可以将修改传递到父级作用域。
  3. 返回值模拟: CMake 没有内建的返回值机制,但可以通过设置外部变量来实现类似功能。
  4. 多参数支持: 使用 ARGV0ARGNARGC 可以方便地处理多个输入参数。

这些例子涵盖了 CMake 中 function 的常见使用方式。

http://www.lryc.cn/news/507382.html

相关文章:

  • 【AI学习】Huggingface复刻Test-time Compute Scaling技术
  • 前端导出PDF的组件及方法
  • Mac升级macOS 15 Sequoia后,无法ssh连接本地虚拟机
  • Pytorch | 利用MI-FGSM针对CIFAR10上的ResNet分类器进行对抗攻击
  • linux 无网络安装mysql
  • 自毁程序密码—阿里聚安全(IDA动态调试)
  • 【华为OD-E卷-寻找关键钥匙 100分(python、java、c++、js、c)】
  • vscode 使用说明
  • 【Linux系统编程】:信号(2)——信号的产生
  • Android Studio AI助手---Gemini
  • 【day09】面向对象——静态成员和可变参数
  • Android学习(七)-Kotlin编程语言-Lambda 编程
  • 彻底认识和理解探索分布式网络编程中的SSL安全通信机制
  • 【libuv】Fargo信令2:【深入】client为什么收不到服务端响应的ack消息
  • Vue3自定义事件
  • BeautifulSoup 与 XPath 用法详解与对比
  • Emacs 折腾日记(五)——elisp 数字类型
  • 重拾设计模式--外观模式
  • 源码编译llama.cpp for android
  • StarRocks 排查单副本表
  • Windows11 家庭版安装配置 Docker
  • 线程知识总结(二)
  • 解决vscode ssh远程连接服务器一直卡在下载 vscode server问题
  • 【Cadence射频仿真学习笔记】IC设计中电感的分析、建模与绘制(EMX电磁仿真,RFIC-GPT生成无源器件及与cadence的交互)
  • Definition of Done
  • 【漏洞复现】CVE-2023-37461 Arbitrary File Writing
  • 简单工厂模式和策略模式的异同
  • HuggingFace datasets - 下载数据
  • 梯度(Gradient)和 雅各比矩阵(Jacobian Matrix)的区别和联系:中英双语
  • Vscode搭建C语言多文件开发环境