projcet url:
https://github.com/schuhschuh/gflags

usage: commandline flags processing



DEFINE: Defining Flags In Program

DEFINE_bool: boolean

DEFINE_int32: 32-bit integer

DEFINE_int64: 64-bit integer

DEFINE_uint64: unsigned 64-bit integer

DEFINE_double: double

DEFINE_string: C++ string



DECLARE: Using the Flag in a Different File

If the flag does span multiple files, DECLARE it in theassociated .h file, and make others #include that .h file if they want to access the flag. The #include will make explicit
the dependency between the two files. This causes the flag to be a global variable.



RegisterFlagValidator: Sanity-checking Flag Values

Here is an example use of this functionality:

static bool ValidatePort(const char* flagname, int32 value) {

   if (value > 0 && value < 32768)   // value is ok

     return true;

   printf("Invalid value for --%s: %d\n", flagname, (int)value);

   return false;

}

DEFINE_int32(port, 0, "What port to listen on");

static const bool port_dummy = RegisterFlagValidator(&FLAGS_port, &ValidatePort);

By doing the registration at global initialization time (right after the DEFINE), we ensure that the registration happens before the commandline is parsed at the beginning of main().



Putting It Together: How to Set Up Flags

gflags::ParseCommandLineFlags(&argc, &argv, true);

The last argument is called "remove_flags".
If true, then ParseCommandLineFlags removes the flags and their arguments from argv, and modifies argc appropriately
. In this case, after the function call, argv will hold only commandline arguments, and not commandline
flags.

If, on the other hand, remove_flags is false, then ParseCommandLineFlags will leave argc unchanged, butwill rearrange the arguments in argv so that the flags are all at the beginning.



Setting Flags on the Command Line

Here's an example of all the ways to specify the "languages" flag:

app_containing_foo --languages="chinese,japanese,korean"

app_containing_foo -languages="chinese,japanese,korean"

app_containing_foo --languages "chinese,japanese,korean"

app_containing_foo -languages "chinese,japanese,korean"

For boolean flags, the possibilities are slightly different:

app_containing_foo --big_menu

app_containing_foo --nobig_menu

app_containing_foo --big_menu=true

app_containing_foo --big_menu=false



Changing the Default Flag Value

It's simple to do this: just assign a new value to the flag in main(), before calling ParseCommandLineFlags():

   DECLARE_bool(lib_verbose);   // mylib has a lib_verbose flag, default is false

   int main(int argc, char** argv) {

     FLAGS_lib_verbose = true;  // in my app, I want a verbose lib by default

     ParseCommandLineFlags(...);

   }

For this application, users can still set the flag value on the commandline, but if they do not, the flag's value will default to true.



Special Flags

--helpshows all flags from all files, sorted by file and then by name; shows the flagname, its default value,
and its help string

--helpfullsame as -help, but unambiguously asks for all flags (in case -help changes in the future)

--helpshortshows only flags for the file with the same name as the executable (usually the one containing main())

--helpxmllike --help, but output is in xml for easier parsing

--helpon=FILE  shows only flags defined in FILE.*

--helpmatch=Sshows only flags defined in *S*.*

--helppackageshows flags defined in files in same directory as main()

--versionprints version info for the executable

--fromenv

--fromenv=foo,bar says to read the values for the foo and bar flags from the environment.

--tryfromenv

--tryfromenv is exactly like --fromenv, except it is not a fatal error to say --tryfromenv=foo if FLAGS_foo is not actually defined in the environment.

--flagfile

--flagfile=f tells the commandlineflags module to read the file f, and to run all the flag-assignments found in that file as if these flags had been specified on the commandline.



The API

For more information about these routines, and other useful helper methods such asgflags::SetUsageMessage() andgflags::SetVersionString,
seegflags.h.



Miscellaneous Notes

If your application has code like this:

   #define STRIP_FLAG_HELP 1    // this must go before the #include!

   #include <gflags/gflags.h>

we will remove the help messages from the compiled source. This canreduce the size of the resulting binary somewhat, and mayalso be useful for
security reasons
.

gflags摘记的更多相关文章

  1. gflags

    一.安装配置 下载地址: https://code.google.com/p/gflags/downloads/list 解压安装: tar zxvf gflags-2.0.tar.gz && ...

  2. 使用PageHeap.EXE或GFlags.EXE检查内存越界错误 (转)

    2011-05-27 20:19 290人阅读 评论(0) 收藏 举报 microsoftdebuggingstructureoutputimagefile 必先利其器之一:使用PageHeap.EX ...

  3. google gflags使用.

    code.google.com 被墙的好开心... gflags很简单. 编译使用都很简单. (不像omaha这种丧心病狂的编译依赖). cmake 生成一下. 一路顺风顺水. 值得注意的是:  默认 ...

  4. glog摘记

    projcet url:https://code.google.com/p/google-glog/ usage: application-level logging setting flags GL ...

  5. 使用PageHeap.EXE或GFlags.EXE检查内存越界错误

    必先利其器之一:使用PageHeap.EXE或GFlags.EXE检查内存越界错误 Article last modified on 2002-6-3 ------------------------ ...

  6. Windbg的gflags.exe -- Attach调试利器

    有没有碰到过程序启动就因为异常直接crash?有没有碰到程序启动之后什么反应也没有?有没有碰到过程序启动之后去触发另一个进程失败?有没有碰到别人的程序调用了你的代码,出现问题以后,让你来调查,而你只有 ...

  7. gflags 学习

    一.下载 https://github.com/gflags/gflags 二.可以将gflags编译成lib 三.在需要的工程的workspace下面引入编译好的gflags动态库,在库里面写好BU ...

  8. linux下gflags的安装

    gflags是google开发的一套命令行参数解析工具,被很多软件系统所依赖,应该算是一个基础的库,安装其实很简单,但是如果在网上找的一些教程大部分都是安装后不能被其他软件调用的,因为默认使用cmak ...

  9. gflags命令行参数解析

    gflags库是google开源的命令行参数解析工具. 安装 官方没有提供二进制库,但是Debian/Ubuntu平台本身提供了二进制库,可以直接git clone https://github.co ...

随机推荐

  1. 使用Github的gh-pages分支展示一个页面

    Github有一个Github pages的功能可以搭建博客或者托管网页,是免费使用的. 首先你的注册Github账号 下载安装git Github官网操作 登录到Github上,创建一个名为 Git ...

  2. sass问题

     用sass的minix定义一些代码片段,且可传参数 /** * @module 功能 * @description 生成全屏方法 * @method fullscreen * @version 1. ...

  3. PHP XML操作的各种方法解析

    PHP提供了一整套的读取 XML文件的方法,很容易的就可以编写基于 XML的脚本程序.本章将要介绍 PHP与 XML的操作方法,并对几个常用的 XML类库做一些简要介绍. XML是一种流行的半结构化文 ...

  4. STL容器读书笔记

    vector vector维护的是一个连续线性空间 vector是动态空间,随着元素的加入会自动扩容,扩充至当前size的两倍,然后将原内容拷贝,开始在原内容之后构造新元素,并释放空间 vector提 ...

  5. Educational Codeforces Round 45 (Rated for Div. 2) G - GCD Counting

    G - GCD Counting 思路:我猜测了一下gcd的个数不会很多,然后我就用dfs回溯的时候用map暴力合并就好啦. 终判被卡了MLE.....  需要每次清空一下子树的map... #inc ...

  6. htm5本地存储方案——websql的封装

    一.websql 简介   在HTML5中,大大丰富了客户端本地可以存储的内容,添加了很多功能来将原本必须保存在服务器上的数据转为保存在客户端本地,从而大大提高了Web应用程序的性能,减轻了服务器端的 ...

  7. logstash部署及基本语法(二)

    一.logstash介绍 Logstash是一个开源的数据收集引擎,可以水平伸缩,而且logstash是整个ELK当中拥有最多插件的一个组件,其可以接收来自不同源的数据并统一输入到指定的且可以是不同目 ...

  8. xmanager

    [root@upright91 run]# ./runBenchmark.sh updbtpcc.properties sqlTableCreates Exception in thread &quo ...

  9. 002 Ajax中传输格式为HTML

    一: 1.介绍 返回的数据可以直接插入到需要的地方. 2.优缺点 二:程序大纲 1.结构 三:程序 1.css body { background: #ffb url("logo.png&q ...

  10. Scala入门4(_的用法)

    从网上找了一篇博客,详细讲解了Scala下划线的用法,这里做保留 博客链接