cmake学习之- cmake_parse_arguments

  • 最后更新: 2019-06-08

一、指令介绍

cmake_parse_arguments 为解析函数(function)或 宏(macros) 参数的命令;


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 参数解析

  1. <options>: 可选值

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

  2. <one_value_keywords>: 单值关键词列表

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

  3. <multi_value_keywords>: 多值关键词列表

    • 每个关键词可对应多个值

  4. <args>... 参数, 一般传入 ${ARGN} 即可

  5. <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:定义了关键词,但是没有对应的值

原文地址:https://www.cnblogs.com/gaox97329498/p/10991449.html