CMake 宏修改输出参数

概述

本文介绍如何使用 CMake 宏在多层嵌套的过程中正确获得输出变量的值。

project(test_macro)

# 第三层调用宏
macro(macro_inner var)
	# 第三层嵌套向输出变量追加内容
	set(${var} ${${var}} "inner")
	
	message(STATUS "macro_inner ${var} = ${${var}}")
	# macro_inner output_var = abc;inner
endmacro()

# 第二层调用宏
macro(macro_handle var)
	message(STATUS "${ARGN}")
	# 空内容,调用宏是没有指定额外参数,此处为空
	
	set(${var} "abc")
	
	message(STATUS "macro_handle var=${var} ${var}=${${var}}")	
	# macro_handle var=output_var output_var=abc 
	# 可以看出 ${var} 的值是 output_var,${${var}} 才是实际的数据内容。 
	
	# 第三层嵌套,内部追加输出变量的内容
	# 传递变量名 output_var
	macro_inner(${var})
	
	message(STATUS "macro_handle-macro_inner ${var}=${${var}}")
	# macro_handle-macro_inner output_var=abc;inner
endmacro()

# 第一层调用宏
macro(macro_warp var)
	# ARGV0, ARGV1 分别代表参数1和参数2
	# ARGN 表示 var 之后的所有参数,可以通过 foreach 的方式遍历获取内容,非常方便传递同类型但不限数量的变量
	message(STATUS "ARGV0=${ARGV0} ARGV1=${ARGV1} ARGN=${ARGN}")
	# ARGV0=output_var ARGV1=args_1 ARGN=args_1;args_2
	
	message(STATUS "var=${var}")									
	# var=output_var
	# 可以看出 var 的值 ${} 才是真正返回变量
	
	# 调用宏,在宏内设置变量的内容
	# 注意:此处需要将 var 的变量传递给内层宏,才能保证内部修改的变量内容外层可获得
	macro_handle(${var})
	message(STATUS "macro_warp var = ${var} ${var} = ${${var}}")
	# macro_warp var = output_var output_var = abc;inner
endmacro()

# 定义宏,将输出的结果保存在变量到 output_var 
macro_warp(output_var "args_1" "args_2")
message(STATUS "output_var = ${output_var}")
# output_var = abc;inner

小结

  • 1.第一次调用宏,返回值传参直接提供保存返回结果的变量名称
  • 2.第二次调用宏(宏内嵌套),需要在内层宏返回时,需要使用${}的方式传参。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值