C++命令行解析包gflags的使用教程

时间:2021-05-20

前言

gflags 是 Google 提供的一个命令行参数处理的开源库,目前已经独立开源,比传统的 getopt() 功能更加强大,可以将不同的参数定义分布到各个源码文件中,不需要集中管理。

提供了 C++ 和 Python 两个版本,这里仅详细介绍 C++ 版本的使用方式。

简介

配置参数分开还是集中管理没有严格的约束,关键要看项目里的统一规范,只是,gflags 可以支持这两种方式,允许用户更加灵活的使用。

当将参数分布到各个源码文件中时,如果定义了相同的参数,那么在编译的时候会直接报错。

安装

很多发行版本会有自己相关的开发库,这里简单介绍使用 CMake 从源码进行编译,源码可以从 GitHub gflags Releases 中选择相关的版本。

如下命令以最新的 2.2.2 版本为例。

$ tar xzf gflags-2.2.2.tar.gz$ cd gflags-2.2.2$ mkdir build && cd build$ cmake -DCMAKE_INSTALL_PREFIX=/usr ..$ make$ make test # 单元测试,执行cmake时需要增加-DBUILD_TESTING=true参数# make install # 安装,一般需要root用户执行

默认会安装到 /usr/local 目录下,需要配置动态库、头文件路径等,通过上述的 -DCMAKE_INSTALL_PREFIX=/usr 参数修改该路径,使用系统默认路径,此时会安装如下的文件。

/usr/lib/libgflags.a/usr/lib/libgflags_nothreads.a/usr/include/gflags/gflags.h/usr/include/gflags/gflags_declare.h/usr/include/gflags/gflags_completions.h/usr/include/gflags/gflags_gflags.h/usr/lib/cmake/gflags/gflags-config.cmake/usr/lib/cmake/gflags/gflags-config-version.cmake/usr/lib/cmake/gflags/gflags-targets.cmake/usr/lib/cmake/gflags/gflags-targets-release.cmake/usr/lib/cmake/gflags/gflags-nonamespace-targets.cmake/usr/lib/cmake/gflags/gflags-nonamespace-targets-release.cmake/usr/bin/gflags_completions.sh/usr/lib/pkgconfig/gflags.pc

详细的安装可以参考gflags install.md 中的介绍,可以使用 ccmake 选择配置项,或者使用上述的 cmake + 参数的方式配置。

示例

假设有个网络客户端代码,需要指定服务端的地址和端口,希望有默认参数,同时允许用户通过命令行来指定不同的值。

#include <iostream>#include <gflags/gflags.h>DEFINE_string(host, "localhost", "Server host address");DEFINE_int32(port, 8080, "Server port");int main(int argc, char **argv){ gflags::ParseCommandLineFlags(&argc, &argv, true); std::cout << "Got '" << FLAGS_host << ":" << FLAGS_port << "'." << std::endl; return 0;}

在代码开头通过 DEFINE_XXX 定义参数,包括了变量名、默认值、参数介绍等;主程序中使用 gflags::ParseCommandLineFlags() 函数解析参数;使用时,在变量名称前添加 FLAGS_ 头即可。

通过如下命令行进行编译。

g++ main.cc -std=c++11 -o gflags -lgflags -lpthread

默认是需要 pthread 线程库的,暂时还不太确定没有使用多线程时,如何关闭该参数。

然后,可以通过如下方式指定参数。

----- 不指定参数,使用默认值$ ./gflagsGot 'localhost:8080'.----- 可以选择指定一个参数,或者多个参数$ ./gflags -host mandLineFlagInfo>* OUTPUT) 接口遍历所有的参数,更多接口可以查看 gflags/gflags.h 头文件。

参考

详细可以查看官方文档 How To Use gflags 中的介绍。

到此这篇关于C++命令行解析包gflags使用教程的文章就介绍到这了,更多相关C++命令行解析包gflags使用内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!

声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。

相关文章