zoukankan      html  css  js  c++  java
  • 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:定义了关键词,但是没有对应的值

  • 相关阅读:
    oracle sql 汉字在库中占的字节数
    面试题:反转单词顺序
    面试题:平衡二叉树
    面试题:二叉树的深度
    面试题:二叉树的下一个节点
    面试题:数字在排序数组中出现的次数
    面试题:把数组排成最小的数
    面试题:二叉树与双向搜索树
    面试题:序列化二叉树
    面试题:字符串的全排列
  • 原文地址:https://www.cnblogs.com/gaox97329498/p/10991449.html
Copyright © 2011-2022 走看看