12. cmake(macro)

目录

1. 语法

1.1 macro 大小写不敏感

 1.2. 固定参数

1.3 变参

1.4 属性式参数 

2. 代码段


1. 语法

1.1 macro 大小写不敏感

宏调用其实就是将宏中的内容复制到调用的地方

macro(my_macro)
	set(RET 1)
	message("RET = ${RET}")
endmacro()

my_macro()
MY_macro()

 

 1.2. 固定参数

实参个数只能比形参个数多,不能比形参个数少

macro(foo_fixed arg1 arg2)
	message("arg1 = ${arg1} arg2 = ${arg2}")
	if(${arg1}) #宏参数不是变量,不能用于逻辑运算,需要加${}
		message("arg1 is true!")
	endif()
endmacro()

foo_fixed(1 "test")

 

1.3 变参

ARGC:参数个数

ARGN::参数数组

ARGV0:0号参数,ARGV1等依次类推

macro(foo_var)
	message("argc = ${ARGC}")

	foreach(var IN ITEMS ${ARGN})
		message("var = ${var}")
	endforeach()

	message("ARGV0 = ${ARGV0}")
endmacro()

foo_var("var1" "var2" "var3")

1.4 属性式参数 

macro(my_parse)
	message("ARGN = ${ARGN}")
	cmake_parse_arguments(
		"MY" #前缀
		"LOG;FILE" #option类型,可选项
		"BIN;LIB" #单值
		"TARGETS" #多值
		${ARGN} #参数数组
	)

	#变量名加前缀
	message("MY_LOG = ${MY_LOG}")
	message("MY_FILE = ${MY_FILE}")
	message("MY_BIN = ${MY_BIN}")
	message("MY_LIB = ${MY_LIB}")
	message("MY_TARGETS = ${MY_TARGETS}")
	#MY_UNPARSED_ARGUMENTS:类型传递错误
	message("MY_UNPARSED_ARGUMENTS = ${MY_UNPARSED_ARGUMENTS}")
	#MY_KEYWORDS_MISSING_VALUES: 未传递值
	message("MY_KEYWORDS_MISSING_VALUES = ${MY_KEYWORDS_MISSING_VALUES}")
endmacro()

my_parse(LOG FILE
BIN "bin"
TARGETS "TAR1" "TAR2"
LIB "lib")

 

1.5 属性式参数错误传递

my_parse(LOG FILE
BIN "bin1" "bin2" #应为单值,这里传的多值
TARGETS "TAR1" "TAR2"
LIB "lib")

 

2. 代码段

 https://github.com/kdvictor/CSDN/tree/main/cmake/12.macro

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值