介绍
gflags 是一个用于C++程序的命令行标志库,帮助程序员定义和处理命令行参数。它主要用于简化程序的配置,使得参数解析变得更加方便和高效。
主要特点
- 易用性: 提供了简单的接口来定义和使用命令行标志。
- 支持多种类型: 支持各种标志类型,如布尔型、整数型、浮点型、字符串型等。
- 默认值: 可以为标志设置默认值,允许用户在不提供值时使用默认值。
- 描述性: 允许为标志提供描述,生成帮助信息,便于用户理解各个参数的作用。
- 自动生成帮助信息: 可以自动生成程序的帮助文档,显示所有定义的标志及其默认值和描述。
安装
下载源码
地址: https://github.com/gflags/gflags
克隆下来
git clone --branch=v2.2.2 --single-branch --depth=1 https://github.com/gflags/gflags.git
linux安装
cd gflags
mkdir build
cd build
cmake -DCMAKE_BUILD_TYPE=Release -DGFLAGS_BUILD_TESTING=OFF -DBUILD_SHARED_LIBS=OFF ..
make
sudo make install
这里编译成静态库,如果想编译成动态库把 -DBUILD_SHARED_LIBS=OFF 去掉
安装完成!
windows安装
使用cmake-gui
进入vs目录,点击gflags.sln
根据需要生成debug和release版本
编译成功,生成
gflags_nothreads_static.lib
gflags_static.lib
在程序中多线程使用 gflags_static.lib , 单线程使用 gflags_nothreads_static.lib
至此安装完成.
使用
定义标志:
#include <gflags/gflags.h>
DEFINE_bool(verbose, false, "Print verbose output");
DEFINE_int32(port, 8080, "Port number for the server");
DEFINE_string(config_file, "config.txt", "Path to the configuration file");
在这个示例中,我们定义了三个标志:
- –verbose (布尔型,默认值为 false)
- –port(整数型,默认值为 8080)
- –config_file(字符串型,默认值为 config.txt)
解析命令行参数:
#include <iostream>
#include <gflags/gflags.h>
DEFINE_bool(verbose, false, "Print verbose output");
DEFINE_int32(port, 8080, "Port number for the server");
DEFINE_string(config_file, "config.txt", "Path to the configuration file");
int main(int argc, char* argv[]) {
google::ParseCommandLineFlags(&argc, &argv, true);
if (FLAGS_verbose) {
std::cout << "Verbose mode is enabled" << std::endl;
}
std::cout << "Port: " << FLAGS_port << std::endl;
std::cout << "Config file: " << FLAGS_config_file << std::endl;
return 0;
}
从文件中解析
#include <iostream>
#include <gflags/gflags.h>
DEFINE_bool(verbose, false, "Print verbose output");
DEFINE_int32(port, 8080, "Port number for the server");
DEFINE_string(config_file, "config.txt", "Path to the configuration file");
int main(int argc, char* argv[]) {
google::ReadFromFlagsFile("./config/config.conf", argv[0], true);
if (FLAGS_verbose) {
std::cout << "Verbose mode is enabled" << std::endl;
}
std::cout << "Port: " << FLAGS_port << std::endl;
std::cout << "Config file: " << FLAGS_config_file << std::endl;
return 0;
}
config/config.conf
--verbose=true
--port=8080
--config_file=config.json
保证路径正确
编译和运行:
确保在编译时链接 gflags 库,例如使用 g++:
g++ -o my_program my_program.cpp -lgflags
运行程序时,你可以通过命令行参数来设置标志:
./my_program --verbose --port=9090 --config_file=my_config.txt
其他文件引用已定义标志
#include <gflags/gflags.h>
DECLARE_bool(verbose);
DECLARE_int32(port);
DECLARE_string(config_file);
结束