#include <gflags/gflags.h>
2.将须要的命令行参数使用gflags的宏:DEFINE_xxxxx(变量名,默认值,help-string) 定义在文件当中,注意全局域哦。gflags支持如下类型:html
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
3.在main函数中加入:python
google::ParseCommandLineFlags(&argc, &argv, true);
argc和argv想必你们都很清楚了,说明如下第三个参数的做用:c++
若是设为true,则该函数处理完成后,argv中只保留argv[0],argc会被设置为1。git
若是为false,则argv和argc会被保留,可是注意函数会调整argv中的顺序。函数
4.这样,在后续代码中可使用FLAGS_变量名访问对应的命令行参数了ui
printf("%s", FLAGS_mystr);
5.最后,编译成可执行文件以后,用户可使用:executable --参数1=值1 --参数2=值2 ... 来为这些命令行参数赋值。google
./mycmd --var1="test" --var2=3.141592654 --var3=32767 --mybool1=true --mybool2 --nomybool3
DECLARE_bool: boolean DECLARE_int32: 32-bit integer DECLARE_int64: 64-bit integer DECLARE_uint64: unsigned 64-bit integer DECLARE_double: double DECLARE_string: C++ string
在gflags的doc中,推荐在对应的.h文件中进行DECLARE_xxx声明,须要使用的文件直接include就好了。
static bool ValidatePort(const char* flagname, int32 value) { if (value > 0 && value < 32768) // value is ok return true; printf("Invalid value for --%s: %d\n", flagname, (int)value); return false; } DEFINE_int32(port, 0, "What port to listen on"); static const bool port_dummy = RegisterFlagValidator(&FLAGS_port, &ValidatePort);
3.判断flags变量是否被用户使用:在gflags.h中,还定义了一些日常用不到的函数和结构体。这里举一个例子,判断参数port有没有被用户设定过
spa
google::CommandLineFlagInfo info; if(GetCommandLineFlagInfo("port" ,&info) && info.is_default) { FLAGS_port = 27015; }
4.定制你本身的help信息与version信息:(gflags里面已经定义了-h和--version,你能够经过如下方式定制它们的内容)命令行
version信息:使用google::SetVersionString设定,使用google::VersionString访问
help信息:使用google::SetUsageMessage设定,使用google::ProgramUsage访问
注意:google::SetUsageMessage和google::SetVersionString必须在google::ParseCommandLineFlags以前执行
参考:code