gflags的使用

简介

在Linux下我们常用gcc –version命令,find –help命令,可是这些命令是怎么实现的呢?

本文以实例的形式说明gflags是如何实现上述命令的。

引用http://www.yeolar.com/note/2014/12/14/gflags/的一段话。
GFlags是Google开源的一个命令行flag(区别于参数)库。和 getopt() 之类的库不同,flag的定义可以散布在各个源码中,而不用放在一起。一个源码文件可以定义一些它自己的flag,链接了该文件的应用都能使用这些flag。这样就能非常方便地复用代码。如果不同的文件定义了相同的flag,链接时会报错。

GFlags是一个C++库,同时也有一个Python移植,使用完全相同的接口。

使用

1.安装gflags

从gitHub上https://github.com/gflags/gflags下载gflags源码,编译成lib文件。

2.加入lib文件和库目录

3.例子

#include <gflags\gflags.h>
#include<iostream>

DEFINE_bool(big_menu, true, "Include 'advanced' options in the menu listing");
DEFINE_string(languages, "english,french,german",
    "comma-separated list of languages to offer in the 'lang' menu");
DEFINE_string(backend, "lmdb",
    "The backend {leveldb, lmdb} containing the images");

void doSth(){

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

    gflags::SetUsageMessage("Compute the mean_image of a set of images given by"
        " a leveldb/lmdb\n"
        "Usage:\n"
        "    compute_image_mean [FLAGS] INPUT_DB [OUTPUT_FILE]\n");
    std::cout << FLAGS_languages << std::endl;
    // Google flags.
    int* pargc= &argc;
    char*** pargv=&argv;
    ::gflags::ParseCommandLineFlags(pargc, pargv, true);//true表示不保留定义的flags
    gflags::ShowUsageWithFlagsRestrict(argv[0], " this is gflags useage test");
    if (FLAGS_languages.find("finnish") != std::string::npos)
        doSth();
    return 0;
}

运行结果如下:
这里写图片描述
这里写图片描述
这里写图片描述

4.案例2—一处定义多处访问

由于flag支持的类型有:

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

我可以用它在不同文件中作共享变量,用来传值,作用相当于extern。
文件Healer.h

#include<gflags\gflags.h>
DEFINE_bool(test, true, "This text should be stripped out");

文件main.cpp

#include"Header.h"
#include <gflags/gflags_declare.h>
#include <iostream>

DECLARE_bool(test); // in head.h
int main(int argc, char** argv) {
    std::cout <<  FLAGS_test << std::endl;
    system("pause");
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值