sudo apt-get install vim
sudo apt-get install gcc g++
sudo apt-get install gdb
sudo apt-get install make cmake
sudo apt-get install lrzsz
sudo apt-get install gitII. gflags
一、gflags介绍与安装
gflags 是 Google 开发的一个开源库,用于 C++ 应用程序中命令行参数的声明、定义和解析。gflags 库提供了一种简单的方式来添加、解析和文档化命令行标志(flags),使得程序可以根据不同的运行时配置进行调整。它具有如下几个特点:
- 易于使用:
gflags提供了一套简单直观的API来定义和解析命令行标志,使得开发者可以轻松地为应用程序添加新的参数。 - 自动帮助和文档:
gflags可以自动生成每个标志的帮助信息和文档,这有助于用户理解如何使用程序及其参数。 - 类型安全:
gflags支持多种数据类型的标志,包括布尔值、整数、字符串等,并且提供了类型检查和转换。 - 多平台支持:
gflags可以在多种操作系统上使用,包括Windows、Linux和macOS。 - 可扩展性:
gflags允许开发者自定义标志的注册和解析逻辑,提供了强大的扩展性。
官方文档: https://gflags.github.io/gflags/
代码仓库:https://github.com/gflags/gflags.git
安装命令:
sudo apt-get install libgflags-dev 验证是否安装的命令:
ls /usr/include/gflags/
whereis libgflags.so二、gflags使用
1. 头文件
#include <gflags/gflags.h>2. 定义参数
利用 gflag 提供的宏定义来定义参数。该宏的 3 个参数分别为 命令行参数名、参数默认值、参数的帮助信息。
DEFINE_bool(reuse_addr, true, "是否开始网络地址重用选项");
DEFINE_int32(log_level, 1, "日志等级:1-DEBUG,2-WARN,3-ERROR");
DEFINE_string(log_file, "stdout", "日志输出位置设置,默认为标准输出"); gflags 支持定义多种类型的宏函数:
DEFINE_bool
DEFINE_int32
DEFINE_int64
DEFINE_uint64
DEFINE_double
DEFINE_string3. 使用定义好的参数
我们可以在程序中通过 FLAGS_name 像正常变量一样访问标志参数。比如在上面的例子中,我们可以通过 FLAGS_reuse_addr 和 FLAGS_log_level 变量来访问命令行参数。
4. 初始化所有参数
当我们定义好参数后,需要告诉可执行程序去处理解析命令行传入的参数,使得 FLAGS_* 变量能得到正确赋值。我们需要在 main 函数中,调用下面的函数来解决命令行传入的所有参数:
google::ParsecommandLineFlags(&argc, &argv, true);5. 使用例子
#include <gflags/gflags.h>
#include <iostream>
DEFINE_string(ip, "127.0.0.1", "这是服务器的监听ip地址,格式:127.0.0.1");
DEFINE_int32(port, 8800, "这是服务器的监听端口,格式:8800");
DEFINE_bool(debug_enable, true, "是否启用调试模式,格式:true/false");
int main(int argc, char* argv[])
{
google::ParseCommandLineFlags(&argc, &argv, true);
std::cout << FLAGS_ip << std::endl;
std::cout << FLAGS_port << std::endl;
std::cout << FLAGS_debug_enable << std::endl;
return 0;
}6. 其他注意事项
-
配置文件设置参数时:
-
不要出现多余的空格
-
文件格式为
.conf,内容如下所示:// main.conf文件 -ip="192.168.0.1" -port=9090 -debug_enable=true -
使用方法:
./main --flagfile main.conf
-
-
命令行设置参数的格式:
./main --ip="123456" --port=8080 --debug_enable=false -
编译文件时记得链接动态库:
g++ main.cc -lgflags -
使用下述命令可以显示帮助信息:
./main --help