zoukankan      html  css  js  c++  java
  • 谷歌的gflags(ZZ)

    http://liuxun.org/blog/gu-ge-de-gflags/

    Google gflags官方文档:http://google-gflags.googlecode.com/svn/trunk/doc/gflags.html

    大家一定用过也写过很多的命令程序,有一类命令行程序是形如这样的“cmd –arg1=arg –args=arg”,要做到这点一种方法是自己写个程序去解析这种命令行形式。

    但其实可以更简单,更高效,更安全,推荐使用谷歌的gflags。 gflags可以在google code上下载,项目主页为http://code.google.com/p/google-gflags/。下载安装都跟普通的linux程序差不多,当然windows下也应该是可以使用的。

    用起来也很简单,首先是包含gflags.h头文件,然后在main方法中调用google::ParseCommandLineFlags(&argc, &argv, true),这样就可以解析到命令行传递过来的参数。

    在程序中定义参数可以用到DEFINE_开头的宏,比如你要定义个bool比变量is_run,可以使用如下语句:

    1
    
    DEFINE_bool(is_run, false, “is run”);

    定义了一个bool变量,默认值是false,最后一个参数“is run”是对这个变量的描述。

    定义字符串用DEFINE_string,定义int用DEFINE_int32,还有DEFINE_int64和DEFINE_uint64。

    如何在程序中使用这些变量呢?FLAGS_is_run这样的格式就可了。到要是在定义的其他文件中使用这些参数呢?那需要用到DECLARE_宏了,想到于声明了一个extern变量。

    那在命令行上如何使用呢?一开始就说过了。还拿那个is_run的例子,可以传递参数—is_run=true。

    基本用法:
    1.首先要定义变量,定义方法如下:
    参数依次是: 变量名, 默认值,说明

    DEFINE_bool(test_bool, false, “tests bool-ness”);
    DEFINE_int32(test_int32, -1, “”);
    DEFINE_int64(test_int64, -2, “”);
    DEFINE_uint64(test_uint64, 2, “”);
    DEFINE_double(test_double, -1.0, “”);
    DEFINE_string(test_string, “initial”, “”);
    2. 定义后就可以使用了,使用方法
    FLAGS_test_bool 当作bool值用
    FLAGS_test_int32 当作int32值用
    ……
    当然,这个变量还可以赋值
    FLAGS_test_int32 = 100;

    3.  如何在命令行传入非默认值
    a. 首先在程序内解析命令行参数
    google::ParseCommandLineFlags(&argc, &argv, false);

    b.运行程序时要传入定义的参数
    ./ext –test_int32=200

    然后你就可以把FLAGS_test_int32按200的值使用了

    4.gtest中的使用
    为什么单提了这个?
    因为我原来一直以为,gtest的main函数中
    testing::InitGoogleTest(&argc, argv);
    已经解析了所有命令行参数,其实….根本不是!
    gtest中必须按照这个个顺序调用:

    testing::InitGoogleTest(&argc, argv);
    google::ParseCommandLineFlags(&argc, &argv, false);
    前者只解析gtest自己需要的参数,后者才会解析你定义的;如果顺序反了,会产生ERROR: unknown command line flag ‘gtest_output’. 因为这时gtest定义的参数还不存在,它不认gtest程序默认传入的gtest_output参数。

  • 相关阅读:
    我们可以用微服务创建状态机吗?
    MyBatis 实现一对多有几种方式,怎么操作的?
    说几个 zookeeper 常用的命令?
    使用 RabbitMQ 有什么好处?
    消息基于什么传输?
    如何获取自动生成的(主)键值?
    vue打包压缩
    mysqldump数据库全备份_MySQL
    mysql的binlog
    开启BinLog_MySQL
  • 原文地址:https://www.cnblogs.com/sure/p/3782790.html
Copyright © 2011-2022 走看看