cmake学习之- cmake_parse_arguments
- 最后更新: 2019-06-08
一、指令介绍
cmake_parse_arguments
为解析函数(function)或 宏(macros) 参数的命令;
cmake_parse_arguments(<prefix> <options> <one_value_keywords>
<multi_value_keywords> <args>...)
cmake_parse_arguments(PARSE_ARGV <N> <prefix> <options>
<one_value_keywords> <multi_value_keywords>)
1.1 参数解析
-
<options>
: 可选值- 此处包含可选项的变量名称, 对应的值为
TRUE
或FALSE
; - 如果传递进来的参数包含此变量,则为
TRUE
反之为FALSE
- 此处包含可选项的变量名称, 对应的值为
-
<one_value_keywords>
: 单值关键词列表- 每个关键词仅仅对应一个值
- 每个关键词仅仅对应一个值
-
<multi_value_keywords>
: 多值关键词列表- 每个关键词可对应多个值
- 每个关键词可对应多个值
-
<args>...
参数, 一般传入${ARGN}
即可
-
<prefix>
前缀, 解析出的参数都会按照prefix_参数名
的形式形成新的变量;
1.2 Coding
cmake_minimum_required(VERSION 3.5)
project(PARSE)
function(MY_PARSE)
set(options ADULT)
set(oneValueArgs NAME AGE)
set(multiValueArgs SCORE)
cmake_parse_arguments(STUDENT "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN} )
# 通过 prefix_参数名: 例如 STUDENT_ADULT
message("isadult = ${STUDENT_ADULT}")
message("name = ${STUDENT_NAME}")
message("age = ${STUDENT_AGE}")
message("score = ${STUDENT_SCORE}")
endfunction()
MY_PARSE(ADULT NAME zhangsan AGE 20 SCORE 100 200 300 400 500)
add_executable(DEMO main.cpp)
运行结果
rs:cmake-parse-arguments$ cmake ./
....
isadult = TRUE
name = zhangsan
age = 20
score = 100;200;300;400;500
....
二、其他
<prefix>_UNPARSED_ARGUMENTS
: 表示未被使用的参数变量( ${ARGN}里面)
<prefix>_KEYWORDS_MISSING_VALUES
:定义了关键词,但是没有对应的值