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的底层也使用该库作为支持. 该库极 ...
随机推荐
- Python——面向对象,简易学生信息管理系统
一.概述 1.1涉及到的知识点 项目开发:创建项目,创建包,导入包: 面向对象:静态方法,继承,内置函数,自定义函数: 数据类型:列表,字典,字符串.列表.字典的转换和自动生成导向: 异常处理:捕获异 ...
- U盘装系统/win to go制作笔记
//添加图片太麻烦了吧,我扔相册里了,需要自取吧. //U盘装系统 环境:win10戴尔灵越台式机 硬件:16G U盘,Windows电脑 软件:老毛桃启动装机工具,win10镜像1803版本 进入网 ...
- Linux基础:df命令总结
本文只总结一些常用的用法,更详细的说明见man df和 df --help. df命令 df命令用于显示目前在Linux系统上的文件系统的磁盘使用情况统计. df命令主要是从各文件系统的Super b ...
- vue 注意
Path Intellisense 插件 @路径提醒 配置文件中配置: "path-intellisense.mappings": { "@": "$ ...
- css flex弹性布局学习总结
一.简要介绍 flex( flexible box:弹性布局盒模型),是2009年w3c提出的一种可以简洁.快速弹性布局的属性. 主要思想是给予容器控制内部元素高度和宽度的能力.目前已得到以下浏览器支 ...
- ADO.NET事务封装
在数据库工具类编写的过程中,对事务的处理操作想避免各个原子操作的事务对象赋值重复操作,想对外暴露的方法为如下形式 public bool ExecuteTransition(Action Transi ...
- Jenkins 插件安装问题
插件安装问题 尝试修改更新站点为可用的镜像站点 打开 Jenkins > Manage Jenkins > Manage Plugins > Advanced,将 Update Si ...
- Mac IDEA 2019.3.1下载及破解,可激活至2089年
背景 目前IDEA已更新到2019.3.3,但是下载这个版本后使用目前网上的常见破解方法会出现各种问题.比如使用注册码方式提示license key is in legacy format,或者使用L ...
- Wannafly Winter Camp 2020 Day 6A Convolution - NTT
求 \(\sum_{i=1}^n \sum_{j=1}^n 2^{a_ia_j}\) Solution 化简一下 \[ 2^{a_ia_j} = p^{(a_i+a_j)^2-a_i^2-a_j^2} ...
- 分享10个免费或便宜的Photoshop替代工具
说到编辑照片和图像文件,一般很多人都使用photoshop软件.然而,使用现在的最新版本Photoshop CC每月最低也要支付980日元,感觉使用门槛有点高的人应该不少吧. 有一篇文章,推荐了10个 ...