CMake | cmake_parse_arguments详解

目录

一、参数解析

二、命令应用

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:定义了关键词,但是没有对应的值。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

烫青菜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值