目录
gflags使用教程
一、应用场景
gflags主要是为了运行程序时,临时修改输入参数方便,如果没有指定参数,则使用默认参数。例如有一个可执行程序connect.exe,用来向指定ip和port发送udp数据,如果不指定ip地址和端口号的话,则向一个默认的ip和端口发数据,如果用户希望自定义ip和端口,可以将参数在运行程序时指定,例如:connect.exe --ip 227.0.0.23 --port 8989。同时还能通过--help查询哪些参数可以修改;使用--flagfile=FileName通过配置文件修改参数。(注:--ip和-ip均可)
如果不用gflags的话,用户一般需要按顺序在指定位置输入参数,或者通过配置文件修改。
二、代码
#include <iostream>
#include <gflags/gflags.h>
DEFINE_string(ip, "227.0.0.23", "multi Group address");//变量名称 初始值 描述
DEFINE_int32(port, 8989, "recv port");
int main(int argc, char **argv)
{
//设置软件版本信息 加-version可以显示
gflags::SetVersionString("V1.0");
//设置使用说明 加-help可以打印帮助说明
gflags::SetUsageMessage("usage: ./a.out <command>\n"
"commands:\n"
" --ip string ip(227.0.0.3)\n"
" --port int port(8080)\n");
gflags::ParseCommandLineFlags(&argc, &argv, true);//将命令行的内容传入gflags解析
std::cout << "init ip:port " << FLAGS_ip << ":" << FLAGS_port << std::endl;
//检查参数有没有被修改
gflags::CommandLineFlagInfo info;
if (gflags::GetCommandLineFlagInfo("port", &info) && info.is_default) {
std::cout << "port is not changed" << std::endl;
} else {
std::cout << "port is changed" << std::endl;//即使修改为默认值,也会被判定为修改了值
}
//代码修改参数
gflags::SetCommandLineOption("port", "8888");
std::cout << "changed ip:port " << FLAGS_ip << ":" << FLAGS_port << std::endl;
return 0;
}
使用配置文件
--ip=123.3.3.4
--port=1234
三、使用
1.编译
使用如下命令编译,需要链接gflags
g++ gflags_learn.cpp -std=c++11 -lgflags
2.在命令行中修改参数
3.通过配置文件修改
四、常用功能
1.支持的数据类型
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
2.可以加的默认参数
--help 显示所有文件的所有flag,按文件、名称排序,显示flag名、默认值和帮助
--helpfull 和 --help 相同,显示全部flag
--helpshort 只显示执行文件中包含的flag,通常是 main() 所在文件
--helpxml 类似 --help,但输出为xml
--helpon=FILE 只显示定义在 FILE.* 中得flag
--helpmatch=S 只显示定义在 *S*.* 中的flag
--helppackage 显示和 main() 在相同目录的文件中的flag
--version 打印执行文件的版本信息
--undefok=flagname,flagname,... 后面列出的flag名,可以在无定义的情况下忽略而不报错
--fromenv --tryfromenv 从环境变量中引入
--flagfile 从文件中引入