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

  • 相关阅读:
    sudo killall -9 php
    php 读取Excel内容时 对时间的值进行格式化处理
    执行Git命令时出现各种 SSL certificate problem 的解决办法
    git 强制拉取更新,本地修改
    PHP:如何合并多维数组中的子数组
    hibernate.validator 与 jackson
    jackson实体转json时 为NULL不参加序列化的汇总
    application.yml 增加数据库连接,重启日志卡死
    logback学习
    注解@Slf4j
  • 原文地址:https://www.cnblogs.com/gaox97329498/p/10991449.html
Copyright © 2011-2022 走看看