本文将介绍cmake如何解析函数或者宏对应的参数列表
语法查询
- 打开cmake手册,查询
cmake_parse_arguments
关键字即可, 如下图
语法
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>)
- 支持指定单个参数、多个参数(参数列表),当传递到函数或者宏内部时, 使用
cmake_parse_arguments
解析参数列表即可。
prefix 可自定义, 用作解析传递的参数使用。
下面一个例子帮助理解
用法
- 官方用法
macro(my_install)
set(options OPTIONAL FAST)
set(oneValueArgs DESTINATION RENAME)
set(multiValueArgs TARGETS CONFIGURATIONS)
cmake_parse_arguments(MY_INSTALL "${options}" "${oneValueArgs}"
"${multiValueArgs}" ${ARGN} )
# ...
使用范例
目标: 使用宏创建多个文件夹,即将创建的文件夹使用参数传递进来
- CMAKE宏代码
# ------------------------------------------------------------
# 创建文件夹
macro(MKDIR)
set(options)
set(oneValueArgs )
# TARGET_ROOT - 有哪些路径需要创建
set(multiValueArgs TARGET_ROOT )
# 解析参数
cmake_parse_arguments(MK "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN} )
# 需要创建这么多的的文件夹
foreach(WHICH_ROOT ${MK_TARGET_ROOT})
# 创建文件夹落地
execute_process( COMMAND ${CMAKE_COMMAND} -E make_directory ${WHICH_ROOT})
endforeach()
endmacro()
cmake_parse_arguments(MK..
其中,MK
可自定义为你想要的参数前缀。
- 调用
- 创建单个目录
MKDIR(TARGET_ROOT ${CMAKE_CURRENT_SOURCE_DIR}/CMAKE2)
- 创建多个目录
# 有这么多文件夹需要创建
set(TO_MK_ROOT
${CMAKE_CURRENT_SOURCE_DIR}/A
${CMAKE_CURRENT_SOURCE_DIR}/B
${CMAKE_CURRENT_SOURCE_DIR}C
)
MKDIR(TARGET_ROOT ${TO_MK_ROOT})
标签:set,cmake,MK,parse,函数参数,arguments,解析,ROOT
From: https://www.cnblogs.com/pandamohist/p/17721178.html