目录
一、参数解析
二、命令应用
1.定义函数
2.函数调用
????????使用cmake_parse_arguments可以定义一个带有命名参数的函数或宏。本文将改进文章使用宏重用代码中的宏。
一、参数解析
cmake_parse_arguments(<prefix> <options> <one_value_keywords>
<multi_value_keywords> <args>...)
- <prefix>前缀:解析出的参数都会按照prefix_参数名的形式形成新的变量。这些变量将保存参数列表中的相应值,如果找不到相关选项,则这些变量将是未定义的。
- <options>可选值:无论选项是否在参数列表中,它们都将被定义为TRUE或FALSE(选项在参数中为true)。
- <one_value_keywords>: 单值关键词列表,每个关键词仅仅对应一个值。
- <multi_value_keywords>: 多值关键词列表,每个关键词可对应多个值。
- <args>...参数:?一般传入${ARGN}即可。
二、命令应用
1.定义函数
????????我们使用函数名( add_catch_test )选项(none)、单值参数( NAME 和 COST )和多值参数( LABELS 、 DEPENDS 和 REFERENCE_FILES )调用cmake_parse_arguments命令。
function(add_catch_test)
set(options)
set(oneValueArgs NAME COST)
set(multiValueArgs LABELS DEPENDS REFERENCE_FILES)
cmake_parse_arguments(add_catch_test
"${options}"
"${oneValueArgs}"
"${multiValueArgs}"
${ARGN}
)
message(STATUS "defining a test ...")
message(STATUS " NAME: ${add_catch_test_NAME}")
message(STATUS " LABELS: ${add_catch_test_LABELS}")
message(STATUS " COST: ${add_catch_test_COST}")
message(STATUS " REFERENCE_FILES: ${add_catch_test_REFERENCE_FILES}")
...
endfunction()
2.函数调用
add_catch_test(
NAME
short
LABELS
short
cpp_test
COST
1.5
)
在cmake_parse_arguments调用后,将设置或取消定义以下变量:
- add_catch_test_NAME:short
- add_catch_test_COST:1.5
- add_catch_test_LABELS:short;cpp_test
- add_catch_test_DEPENDS
- add_catch_test_REFERENCE_FILES
- add_catch_test_OPTIONAL
- add_catch_test_UNPARSED_ARGUMENTS:表示未被使用的参数变量( ${ARGN}里面)
- add_catch_test_KEYWORDS_MISSING_VALUES:定义了关键词,但是没有对应的值。
|