# cmake_parse_arguments
# 作用
解析cmake
中传入给macro/function
的参数
命令的使用格式:
cmake_parse_arguments(<prefix> <options> <one_value_keywords>
<multi_value_keywords> <args>...)
<prefix>
表示给变量添加的前缀<options>
是变量的类型,可选参数<one_value_keywords>
是变量类型,单值变量<multi_value_keywords>
是变量类型,多值变量<args>...
可变参数,没有被前面几种变量类型捕获的变量都会放在这里
# 示例
function(test_cmake_parse NAME)
set(options SLOW FAST)
set(oneValueArgs DESTINATION DIRECTORY)
set(multiValueArgs TARGETS VARS)
cmake_parse_arguments(_TEST "EXCLUDE" "" "" ${ARGN})
cmake_parse_arguments(_TYPE "STATIC;SHARED;MODULE" "" "" ${ARGN})
cmake_parse_arguments(_STD "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
message(STATUS "TESTING___ ${_TEST_EXCLUDE}")
message(STATUS "_TYPE ${_TYPE_SHARED}")
message(STATUS "_STD_SLOW ${_STD_SLOW}")
message(STATUS "_STD_FAST ${_STD_FAST}")
message(STATUS "_STD_DESTINATION ${_STD_DESTINATION}")
message(STATUS "_STD_DIRECTORY ${_STD_DIRECTORY}")
message(STATUS "_STD_TARGETS ${_STD_TARGETS}")
message(STATUS "_STD_VARS ${_STD_VARS}")
endfunction()
test_cmake_parse(PROJ EXCLUDE SHARED SLOW FAST DESTINATION tmp DIRECTORY "/home/user" TARGETS for bar)
# -- TESTING___ TRUE
# -- _TYPE TRUE
# -- _STD_SLOW TRUE
# -- _STD_FAST TRUE
# -- _STD_DESTINATION tmp
# -- _STD_DIRECTORY /home/user
# -- _STD_TARGETS for;bar
# -- _STD_VARS
如上,定义了cmake
函数,从上面的定义可以看出,通过cmake_parse_arguments
的作用就是负责定义函数或宏的参数,并根据定义解析传入的参数,同时给变量添加函数内的命名前缀。
能够解析的参数有三种类型,可选项,类似bool
类型,单值类型变量和多值类型,没有解析到的参数都将放入其后所跟的最优一个参数上。
cmake_parse_arguments
还能自动给变量添加前缀名,如上面定义的_TYPE_SHARED
和_STD_FAST
等。