gflags

一. 下载与安装

这里直接使用包管理器安装:

sudo apt install libgflags-dev

二. gflags的简单使用

1. 定义需要的类型

格式: DEFINE_类型名(变量名, 默认值, 描述语)

类型 定义格式
bool类型 DEFINE_bool
32位的int类型 DEFINE_int32
64位的int类型 DEFINE_int64
64位的unsigned int 类型 DEFINE_uint64
double类型 DEFINE_double
string类型 DEFINE_string

例子:

  • 定义一个名为name的string类型的变量
DEFINE_string(name, "xiaoming", "this is the name who you love! ");
  • 定义一个名为uppercase的bool类型的变量
DEFINE_bool(uppercase, true, "Whether the output characters are in Uppercase format! ");
  • 定义一个名为count的int类型的变量
DEFINE_int32(count, 10, "Number of times the output is repeated! ");

2. 在命令行中给定义好的变量进行赋值操作:

--uppercase=true   或者   --uppercase
--uppercase=false 或者 --nouppercase
--name="china" 或者 --name "China"
--count=10 或者 --count 10

3. 在代码中使用定义好的变量

在代码中使用之前定义好的变量时,在每一个变量名前加FLAGS_的前缀就可以了.

定义的变量名 代码中使用的变量名
name FLAGS_name
uppercase FLAGS_uppercase
count FLAGS_count

三. 小小的demo

1. demo.cpp文件的编写

#include <iostream>
#include <gflags/gflags.h> using namespace std; // 定义三个变量
DEFINE_string(name, "xiaoming", "this is the name who you love! ");
DEFINE_bool(uppercase, true, "Whether the output characters are in Uppercase format! ");
DEFINE_int32(count, 10, "Number of times the output is repeated! "); // 绑定对变量name和count的值合法性的检测函数
static bool ValidateName(const char* flagname, const string& value);
DEFINE_validator(name, &ValidateName);
static bool ValidateCount(const char* flagname, int value);
DEFINE_validator(count, &ValidateCount); /** @brief 主函数 */
int main(int argc, char* argv[])
{
// 进行解析命令行参数,true表示会修改argc和argv的值, 把相应的命令行参数去除掉。
gflags::ParseCommandLineFlags(&argc, &argv, true); if (FLAGS_uppercase)
{
for (int i = 0; i < FLAGS_count; ++i)
cout << "I LOVE " << FLAGS_name << endl;
}
else
{
for (int i = 0; i < FLAGS_count; ++i)
cout << "i love " << FLAGS_name << endl;
} return 0;
} /** @brief 定义对变量name值合法性的检测函数 */
static bool ValidateName(const char* flagname, const string& value)
{
if (value.empty())
{
cout << "不应该输入空的参数值(" << flagname << " 的值为空) " << endl << endl;
return false;
}
return true;
} /** @brief 定义对变量count值的合法性检测函数。 */
static bool ValidateCount(const char* flagname, int value)
{
if (value <= 0)
{
cout << "不应该输入小于或等于0的参数值(" << flagname << " 的值<= 0) " << endl << endl;
return false;
}
return true;
}

2. CMakeLists.txt文件的编写

cmake_minimum_required(VERSION 3.10.2)
project(gflag_demo VERSION 1.0.0)
add_executable(demo.out demo.cpp)
find_package(gflags REQUIRED)
target_link_libraries(demo.out gflags)

3. 编译

mkdir build
cd build
cmake ..
make

4. 运行

./demo.out --uppercase=false --name="China" --count=10

输出为:

i love  China
i love China
i love China
i love China
i love China
i love China
i love China
i love China
i love China
i love China

gflag的简单入门demo的更多相关文章

  1. Quartz学习——Quartz简单入门Demo(二)

    要学习Quartz框架,首先大概了解了Quartz的基本知识后,在通过简单的例子入门,一步一个脚印的走下去. 下面介绍Quartz入门的示例,由于Quartz的存储方式分为RAM和JDBC,分别对这两 ...

  2. 深入浅出Tabhost+简单入门Demo

    小伙伴们在手机上逛淘宝的时候,会发现在淘宝的下面有个按钮,分别是首页.微淘.社区.购物车和我的淘宝,点击不同的按钮会跳转到不同的页面,目前小编所接手的这个项目,也需要用到类似这样的功能,小编就发挥网络 ...

  3. ECharts简单入门demo

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  4. Dubbo入门—搭建一个最简单的Demo框架

    一.Dubbo背景和简介 1.电商系统的演进 Dubbo开始于电商系统,因此在这里先从电商系统的演变讲起. a.单一应用框架(ORM) 当网站流量很小时,只需一个应用,将所有功能如下单支付等都部署在一 ...

  5. Dubbo入门---搭建一个最简单的Demo框架(转)

    Dubbo背景和简介 Dubbo开始于电商系统,因此在这里先从电商系统的演变讲起. 单一应用框架(ORM) 当网站流量很小时,只需一个应用,将所有功能如下单支付等都部署在一起,以减少部署节点和成本.  ...

  6. C#中缓存的使用 ajax请求基于restFul的WebApi(post、get、delete、put) 让 .NET 更方便的导入导出 Excel .net core api +swagger(一个简单的入门demo 使用codefirst+mysql) C# 位运算详解 c# 交错数组 c# 数组协变 C# 添加Excel表单控件(Form Controls) C#串口通信程序

    C#中缓存的使用   缓存的概念及优缺点在这里就不多做介绍,主要介绍一下使用的方法. 1.在ASP.NET中页面缓存的使用方法简单,只需要在aspx页的顶部加上一句声明即可:  <%@ Outp ...

  7. Dubbo入门介绍---搭建一个最简单的Demo框架

    Dubbo入门---搭建一个最简单的Demo框架 置顶 2017年04月17日 19:10:44 是Guava不是瓜娃 阅读数:320947 标签: dubbozookeeper 更多 个人分类: D ...

  8. Maven+SpringMVC+Dubbo 简单的入门demo配置

    转载自:https://cloud.tencent.com/developer/article/1010636 之前一直听说dubbo,是一个很厉害的分布式服务框架,而且巴巴将其开源,这对于咱们广大程 ...

  9. Okio 1.9简单入门

    Okio 1.9简单入门 Okio库是由square公司开发的,补充了java.io和java.nio的不足,更加方便,快速的访问.存储和处理你的数据.而OkHttp的底层也使用该库作为支持. 该库极 ...

随机推荐

  1. 笔记-Git基础

    git配置 git config --global user.name "xxx" //配置用户名 git config --global user.email "xxx ...

  2. 【55】目标检测之IOU交并比

    交并比(Intersection over union) 你如何判断对象检测算法运作良好呢?在本笔记中,你将了解到并交比函数,可以用来评价对象检测算法.在下一个笔记中,我们用它来插入一个分量来进一步改 ...

  3. 什么是kafka,怎么使用? (3)

    上次我因为在windows上解压一个.gz的包没有解压出来,故需要在linux使用kafka,而且这kafka的快速开始上有个zookeeper的文件配置 所以我感觉有必要把dubbo-zookeep ...

  4. PPT、Word、Excel模板免费下载

    本篇文章可能只有寥寥数字,但他的作用可能很大,可能帮助到很多朋友.本人喜欢搜集一些资源,也爱免费分享,因为好东西我藏不住,总感觉分享出来更快乐. 网址:https://www.bangongziyua ...

  5. Function and Function

    If we define , do you know what function  means? Actually,  calculates the total number of enclosed ...

  6. #AcWing系列课程Level-2笔记——1. 快速排序算法

    快速排序算法(冒泡排序算法的升级版) 编写快速排序,记住下面的思路,代码也就游刃有余了! 1.首先确定分界点:分界点设为x,可以取q[left],q[(left+right)>>2],q[ ...

  7. 剑指offer-面试题49-丑数-空间换时间

    /* 题目: 求从1开始的第n个丑数. */ /* 思路: 按顺序列出各个丑数. */ #include<iostream> #include<cstring> #includ ...

  8. matplotlib制作图表数据

    import matplotlib.pyplot as plt import matplotlib fig=plt.figure() labels=['陆地','海洋'] data=[29,71] p ...

  9. aov.h-1.1

    //AOV网与拓扑排序类 #ifndef _AOV_H_ #define _AOV_H_ #include<iostream> #include<cstdio> #includ ...

  10. 用sort实现对struct的排序

    用sort 排序 struct +++ //method 1 struct node{ int k,s; }p[5005]; bool cmp1(node x,node y){ return x.s& ...