首页 > 其他分享 >cmake之解析宏或者函数参数

cmake之解析宏或者函数参数

时间:2023-09-21 23:33:07浏览次数:38  
标签:set cmake MK parse 函数参数 arguments 解析 ROOT

  • 本文将介绍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

相关文章

  • ZIP伪加密解析
    ZIP伪加密解析1、zip组成一个ZIP文件由三个部分组成:压缩源文件数据区+压缩源文件目录区+压缩源文件目录结束标志。一个zip文件由这样三个部分组成_zip文件结构_一只独孤的程序猿的博客-CSDN博客2、实例压缩源文件数据区:504B0304:这是头文件标记(0x04034b50)1400:解压文......
  • 解析Vue项目
    解析Vue项目1、浏览器中访问某个地址,会显示某个页面的组件根组件:App.vue 2、配置路由router----》index.js---》constroutes=[{path:'/lqz',name:'lqz',component:Lqz#组件,需要导入......
  • 解析vue项目、
    解析一下vue项目1为什么浏览器中访问某个地址,会显示某个页面组件//-根组件:App.vue必须是<template><divid="app"><router-view></router-view></div></template>//-1配置路由router---......
  • zookeeper中zoo.cfg参数解析
    ticktime=20002000为通信心跳inilimit=10lf(leadersandfollow)初始通信时限10*2000添加配置server.A=B:C:DA是一个数字表示第几号服务器B是这个服务器的地址C是这个服务器follow和leader交换信息的端口D是万一服务器挂了需要一个端口重新来进行选举,选出一个新的leader,这......
  • OpenGL with GLFW GLAD and CMAKE
    0.前言首先,无论是在youtube还是网站上,许多OpenGL的环境配置都是在VSstudio里配置的,个人比较喜欢使用VScode,以及Cmake.下文给出了一个Cmake版本关于GLFWGLAD的编译环境。另外,感谢分享知识的人。具体的代码已放入github中,代码地址https://github.com/Alex-gift-hit/O......
  • ClickHouse(15)ClickHouse合并树MergeTree家族表引擎之GraphiteMergeTree详细解析
    GraphiteMergeTree该引擎用来对Graphite数据(图数据)进行瘦身及汇总。对于想使用ClickHouse来存储Graphite数据的开发者来说可能有用。如果不需要对Graphite数据做汇总,那么可以使用任意的ClickHouse表引擎;但若需要,那就采用GraphiteMergeTree引擎。它能减少存储空间,同时能提高Grap......
  • 无线振弦采集仪应用隧道安全监测的方案解析
    无线振弦采集仪应用隧道安全监测的方案解析隧道是一种特殊的工程结构,它们在道路、铁路和地铁等交通设施中起着至关重要的作用。隧道安全监测是确保隧道运行安全的必要手段之一,其中振弦采集仪是一种常用的监测设备。在本文中,我们将分析无线振弦采集仪在隧道安全监测中的应用方案。......
  • 解析vue项目,scoped,ref属性,混入mixin,插件,Elementui
    0解析一下vue项目......
  • IPv6 Internet Protocol version 6协议解析
    简介1883定义了ipv6的协议,不过作废了,在2460又重新做了定义,区别不大,只是有个别字段做了扩充。2373和2374对ipv6的格式做了规定。ipv6是下一代ip地址协议,比ipv4的地址更长,可以表示更多地址段。不过由于ipv6地址太长,不方便记忆,并且ipv4的基础设施太过根深蒂固,所以目前还没有完全普......
  • 使用dom4j解析xml文件及selectNodes取不到值问题解决
    参考文档:https://blog.csdn.net/PARADDD/article/details/131307189https://blog.csdn.net/weixin_37703598/article/details/81273199......