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.第二次調用宏(宏內嵌套),需要在內層宏返回時,需要使用${}的方式傳參。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章