Google gflags usage on windows
来源:互联网 发布:通达信选股软件 编辑:程序博客网 时间:2024/05/06 15:26
gflags 是 google 的开源项目,用来解析程序的命令行输入参数。传统的方法是手工解析argv参数,或者使用getopt函数。两种方法都比较费劲。使用Google gflags可以大大简化命令行参数处理。下面主要记录如何在windows下利用CMake编译gflags,并用CMakeLists来使用gflags,以及基本的使用方法。
Complie gflags By CMake
在github上下载源代码,https://github.com/gflags/gflags,online帮助文档。
使用CMake编译gflags。这里要注意的是,后面我将在glog中使用gflags,需要将gflags在google namespace下编译。所以需要设置环境变量GFLAGS_NAMESPACE为google( -DGFLAGS_NAMESPACE=google )。详情参考stackoverflow。
编译好之后,在build文件夹下有vs工程文件gflags.sln,直接打开生成就行了。build目录就有了lib和include文件夹,里面分别包含了需要的库文件和头文件。
写CMakeLists
这里是参考gfalgs的使用手册。直接贴出我的CMakeLists好了。
也自己新建VS工程,然后手工指定include目录和lib目录。
cmake_minimum_required(VERSION 3.0)project(GflagsTest)find_package (gflags REQUIRED)include_directories (${gflags_INCLUDE_DIR})add_executable (GflagsTest GflagsTest.cpp)target_link_libraries (GflagsTest gflags)
使用方法
#include <iostream>#include <string>#include <gflags/gflags.h>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" );using std::cout;using std::endl;int main(int argc, char *argv[]) { google::ParseCommandLineFlags(&argc, &argv, true); if ( FLAGS_big_menu ){ std::cout << "FLAGS_big_menu is true" << std::endl; } else{ std::cout << "FLAGS_big_menu is false" << std::endl; } std::cout << FLAGS_languages << std::endl; std::cout << FLAGS_big_menu << std::endl; if ( FLAGS_languages.find( "german" ) != std::string::npos ){ std::cout << FLAGS_languages << std::endl; } return 0;}
还是先贴代码吧。
然后再来说一下怎么使用gflags来解析命令行参数。
gflags中定义了一些固定的类型,可以按照这些类型来声明和输入参数。常用的bool,int,double, string类型都支持。
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
这些类型的定义都在头文件gflags/gflags.h的最下面。感兴趣可以看看。
使用的时候所有的DEFINE_* 宏都需要三个参数,分别是flag的名称,默认值和说明。
在程序中,首先包含头文件gflags/gflags.h,然后定义需要使用的flag。
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" );
比如这里定义了一个bool和一个string类型的flag,其中bool型的flag名称为big_menu,默认值为true;string类型的flag名称为languages,,默认值为”english,french,german”。
定义好自己要使用的flag之后,在使用的时候只用一行代码 google::ParseCommandLineFlags(&argc, &argv, true) 就够了,通常这行代码是在main函数内最前边。
对于定义的flag,会生成对应的变量FLAGS_flag。然后我们就可以像使用正常定义的变量来使用FLAGS_flag了。比如对于定义的big_menu,会生成一个FLAGS_big_menu的bool型变量,我们可以根据这个变量来确定程序的执行流程。在程序中也可以改变它的值。
对于定义的languages,也会生成一个FLAGS_languages的字符串string类型的变量。
命令行输入格式
下面就是最后的输入命令行参数了。输入是有一定格式要求的。
对于bool类型的big_menu,输入时有几种方式:
GflagsTest --big_menuGflagsTest --big_menu=trueGflagsTest --nobig_menuGflagsTest --big_menu=false
其中前面两种是令big_menu为true,后面两种令其为false。
同样对于string类型的languages也有几种方式:
GflagsTest --languages="chinese,japanese,korean"GflagsTest -languages="chinese,japanese,korean"GflagsTest --languages "chinese,japanese,korean"GflagsTest -languages "chinese,japanese,korean"
为了统一,推荐使用一样的格式, –variable=value for non-boolean flags, and –variable/–novariable for boolean flags。
比如:
GflagsTest -languages=”chinese,french,german” -big_menu=false
参考
https://gflags.github.io/gflags/
- Google gflags usage on windows
- Google gflags
- google gflags 使用方法
- Google gflags使用说明
- Google gflags安装
- Google gflags介绍
- Google gflags使用说明
- 【C++】google gflags库
- Google gflags使用说明
- Google gflags使用说明
- google gflags 使用1
- google gflags 使用2
- Google gflags 的使用
- Google gflags使用说明
- google usage
- google gflags 库完全使用
- Google命令行工具gflags使用
- Google gflags基础与进阶
- android 代码 混淆- 原来如此简单
- 深入浅出 - Android系统移植与平台开发(六)- 搭建基于Linux的Android开发环境
- 文章标题
- CentOS7安装iptables防火墙
- js 把字符串转化为日期
- Google gflags usage on windows
- 源码分析 --- Activity的启动过程
- adb 删除系统预装应用小记
- stm32F429 emwin 竖屏切换到横屏 刷背景色显示条纹
- CVS打开 配置host的方法
- Android使用fitsSystemWindows属性实现--状态栏【status_bar】各版本适配方案
- RIDE使用ff_profile_dir来加载你的配置文件(启动浏览器时加载第三方插件)
- 用JavaScript实现图片缓慢缩放效果
- 加快UE4 Setup.bat执行速度