gflag的简单入门demo
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的更多相关文章
- Quartz学习——Quartz简单入门Demo(二)
要学习Quartz框架,首先大概了解了Quartz的基本知识后,在通过简单的例子入门,一步一个脚印的走下去. 下面介绍Quartz入门的示例,由于Quartz的存储方式分为RAM和JDBC,分别对这两 ...
- 深入浅出Tabhost+简单入门Demo
小伙伴们在手机上逛淘宝的时候,会发现在淘宝的下面有个按钮,分别是首页.微淘.社区.购物车和我的淘宝,点击不同的按钮会跳转到不同的页面,目前小编所接手的这个项目,也需要用到类似这样的功能,小编就发挥网络 ...
- ECharts简单入门demo
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...
- Dubbo入门—搭建一个最简单的Demo框架
一.Dubbo背景和简介 1.电商系统的演进 Dubbo开始于电商系统,因此在这里先从电商系统的演变讲起. a.单一应用框架(ORM) 当网站流量很小时,只需一个应用,将所有功能如下单支付等都部署在一 ...
- Dubbo入门---搭建一个最简单的Demo框架(转)
Dubbo背景和简介 Dubbo开始于电商系统,因此在这里先从电商系统的演变讲起. 单一应用框架(ORM) 当网站流量很小时,只需一个应用,将所有功能如下单支付等都部署在一起,以减少部署节点和成本. ...
- 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 ...
- Dubbo入门介绍---搭建一个最简单的Demo框架
Dubbo入门---搭建一个最简单的Demo框架 置顶 2017年04月17日 19:10:44 是Guava不是瓜娃 阅读数:320947 标签: dubbozookeeper 更多 个人分类: D ...
- Maven+SpringMVC+Dubbo 简单的入门demo配置
转载自:https://cloud.tencent.com/developer/article/1010636 之前一直听说dubbo,是一个很厉害的分布式服务框架,而且巴巴将其开源,这对于咱们广大程 ...
- Okio 1.9简单入门
Okio 1.9简单入门 Okio库是由square公司开发的,补充了java.io和java.nio的不足,更加方便,快速的访问.存储和处理你的数据.而OkHttp的底层也使用该库作为支持. 该库极 ...
随机推荐
- clr via c# 接口
1,常用接口及其定义 public interface IDisposable{ void Dispose(); } public interface IEnumerable}{ IEnumerato ...
- 这 100 道 Python 题,拿去刷!!!
2020年,学 Python 还有价值吗? 根据 2020 年 2 月的 TIOBE 编程语言排行榜显示,Python仍然稳居第三位. 此排行榜排名基于互联网上有经验的程序员. 课程和第三方厂商的数量 ...
- 【seata源码学习】001 - seata-server的配置读取和服务注册
github, seata vergilyn seata-fork seata.io zh-cn docs (PS. 随缘看心情写,坚持不了几天.文章还是写的超级的烂,排版也奇差无比~~~~ 脑壳疼~ ...
- IIS WEB站点设置
IIS安装 打开控制面板 -> 程序 -> 打开或关闭Windows功能 ,在弹出得对话框中选择“Internet信息服务”复选框.我这里是Windows server 2019 ,界面有 ...
- 9款最好用的MySQL数据库客户端图形界面管理工具,第三款我用了10年
MySQL的管理维护工具非常多,除了系统自带的命令行管理工具之外,还有许多其他的图形化管理工具,这里我介绍几个经常使用的MySQL图形化管理工具,供大家参考. MySQL是一个非常流行的小型关系型数据 ...
- PTA Is Topological Order
Write a program to test if a give sequence Seq is a topological order of a given graph Graph. Format ...
- JS中require函数的警告提示
在JS中常常使用require函数来引入文件或者路径,不过在使用时需要注意一点,它的参数必须是一串完整的字符串常量或者是由字符常量与变量拼接. (一)require函数的参数为一个变量,如下图所示: ...
- Windows 使用 TCPing 工具来获取 TCP延迟、端口通顺情况、已禁Ping服务
https://elifulkerson.com/projects/tcping.php
- Codeforces Round #622(Div 2)C2. Skyscrapers (hard version)
题目链接 : C2. Skyscrapers (hard version) 题目描述 : 与上一道题类似,只是数据范围变大, 5e5, 如果用我们原来的方法,铁定是超时的. 考察点 : 单调栈,贪心, ...
- 硬核干货 | C++后台开发学习路线
2020秋招提前批 C/C++相关开发 拿到腾讯.华为等offer 学习路线及时间安排 推荐时间为4个月,包括四部分:语言,计算机基础知识,项目基础知识,项目实践. 语言 推荐学习1个月 学习方针:视 ...