CMake基础教程(34)cmake_parse_arguments解析函数或者宏的参数

Posted 奇妙之二进制

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CMake基础教程(34)cmake_parse_arguments解析函数或者宏的参数相关的知识,希望对你有一定的参考价值。

文章目录

一、指令介绍

cmake_parse_arguments 用解析函数(function)或 宏(macros)的输入参数,得到形式为<prefix>_xxx 的变量。

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>)

1.1 参数解析

<options>: 可选值

此处包含可选项的变量名称, 对应的值为 TRUE 或 FALSE;
如果传递进来的参数包含此变量,则为 TRUE 反之为 FALSE

<one_value_keywords>: 单值关键词列表

每个关键词仅仅对应一个值

<multi_value_keywords>: 多值关键词列表

每个关键词可对应多个值

<args>… 参数, 一般传入 $ARGN 即可

<prefix>前缀, 解析出的参数都会按照 prefix_参数名的形式形成新的变量;

1.2 Coding

cmake_minimum_required(VERSION 3.5)

project(PARSE)


function(MY_PARSE)

    set(options ADULT)
    set(oneValueArgs NAME AGE)
    set(multiValueArgs SCORE)

    cmake_parse_arguments(STUDENT "$options" "$oneValueArgs" "$multiValueArgs" $ARGN )

    # 通过 prefix_参数名: 例如 STUDENT_ADULT
    message("isadult  = $STUDENT_ADULT")
    message("name  = $STUDENT_NAME")
    message("age  = $STUDENT_AGE")
    message("score  = $STUDENT_SCORE")

endfunction()

MY_PARSE(ADULT NAME zhangsan AGE 20 SCORE 100 200 300 400 500)

add_executable(DEMO main.cpp)

运行结果

rs:cmake-parse-arguments$ cmake ./
....

isadult  = TRUE
name  = zhangsan
age  = 20
score  = 100;200;300;400;500

二、其他

<prefix>_UNPARSED_ARGUMENTS: 表示未被使用的参数变量( $ARGN里面)

<prefix>_KEYWORDS_MISSING_VALUES:定义了关键词,但是没有对应的值

以上是关于CMake基础教程(34)cmake_parse_arguments解析函数或者宏的参数的主要内容,如果未能解决你的问题,请参考以下文章

cmake基础教程(43)关于变量设置的scope问题

cmake基础教程(43)关于变量设置的scope问题

cmake基础教程(13)cmake安装位置前缀CMAKE_INSTALL_PREFIX

CMake基础教程(20)认识cmake命令

CMake基础教程(15)cmake指定C++ 11标准

CMake基础教程(39)pkgconfig