• gflags学习笔记(一)gflags的介绍和安装(ubuntu环境)



    前言

    什么是GFLAGS

    Gflags是一种命令行解析工具,主要用于解析用命令行执行可执行文件时传入的参数。与getops()不同的是,在gflags中flag可以分散的定义在各个文件之中,而不用定义在一起,这就意味着在我们可以在一个单独的文件中只定义这个文件所需要用到的一些flag,链接了该文件应用都可以使用该文件中的flag,这样就能非常方便的实现代码的复用,如果不同的文件定义了相同的flag,则会产生错误,所以需要明确规范gflags的使用规范。
    gflags在2008年首次推出,至今已有10年时间,目前有很多公司都在用gflags。

    gflags的优势

    用gflags跟用配置文件相比,能实现的功能其实没多大差别。但用gflags有个好处就是,很容易跟脚本结合在一起。比如最近笔者需要调用一个用了gflags的程序将某个文件里头的所有用户都执行某个操作,这个应用程序如果不用gflags,则需要在配置里头指定要读取的文件,甚至需要在程序里头添加读文件逐行进行处理的代码。现在用了gflags就很方便了。

    cat /data/pd.log | while read line;do ./baike_oidb_client …/conf/baike.conf --action=1 --uins=$line;done

    直接一行shell脚本搞定,当然就想这行命令所显示的,有些固定项我们也可以用配置文件,免得整个命令太长。

    当然其他好处就是做模块隔离,这个跟宏相比的好处是动态运行时启动或者挂掉某些功能,而不需要重新编译。

    gflags安装和使用(ubuntu环境)

    下载

    通过github官方或通过git 命令clone

    1. 通过github官方下载最新的gtest源码。
    2. 通过命令
      git clone https://github.com/gflags/gflags

    配置

    1. 下载后解压文件下:
    总用量 136
    -rw-rw-r-- 1 zhouchen zhouchen  1447  728 05:06 appveyor.yml
    -rw-rw-r-- 1 zhouchen zhouchen    32  728 05:06 AUTHORS.txt
    drwxrwxr-x 3 zhouchen zhouchen  4096  728 05:06 bazel/
    -rw-rw-r-- 1 zhouchen zhouchen   629  728 05:06 BUILD
    -rw-rw-r-- 1 zhouchen zhouchen 13050  728 05:06 ChangeLog.txt
    drwxrwxr-x 2 zhouchen zhouchen  4096  728 05:06 cmake/
    -rw-rw-r-- 1 zhouchen zhouchen 29703  921 17:45 CMakeLists.txt
    -rw-rw-r-- 1 zhouchen zhouchen  1479  728 05:06 COPYING.txt
    drwxrwxr-x 2 zhouchen zhouchen  4096  728 05:06 doc/
    -rw-rw-r-- 1 zhouchen zhouchen   113  728 05:06 .gitattributes
    -rw-rw-r-- 1 zhouchen zhouchen   407  728 05:06 .gitignore
    -rw-rw-r-- 1 zhouchen zhouchen  4617  728 05:06 INSTALL.md
    -rw-rw-r-- 1 zhouchen zhouchen 13662  728 05:06 README.md
    drwxrwxr-x 2 zhouchen zhouchen  4096  728 05:06 src/
    drwxrwxr-x 4 zhouchen zhouchen  4096  728 05:06 test/
    -rw-rw-r-- 1 zhouchen zhouchen   409  728 05:06 .travis.yml
    -rw-rw-r-- 1 zhouchen zhouchen   255  728 05:06 WORKSPACE
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    1. 设置动态库
      CMakeList.txt中默认编译gflags为静态库,若想实现编译出动态库,需要设置
      gflags-master/CMakeList.txt
    gflags_define (BOOL BUILD_SHARED_LIBS          "Request build of shared libraries."                                       ON ON)
    gflags_define (BOOL BUILD_STATIC_LIBS          "Request build of static libraries (default if BUILD_SHARED_LIBS is OFF)." OFF OFF)
    
    • 1
    • 2
    1. 编译出gtest自带的test
      还是在这个CMakeList.txt设置
    gflags_define (BOOL BUILD_TESTING              "Enable build of the unit tests and their execution using CTest."          ON ON)
    
    • 1

    编译

    cd gflags-master
    mkdir build
    cd build
    cmake ..
    make
    
    • 1
    • 2
    • 3
    • 4
    • 5

    安装

    sudo mkdir /usr/lib/gflags
    cd gflags-master/build/lib
    sudo cp * /usr/lib/gflags/
    cd gflags-master/include
    sudo cp ./gflags /usr/include/gflags -R
    sudo chmod 755 /usr/lib/gflags/*.so
    sudo chmod 755 /usr/include/gflags/ -R
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    到此,Gflags就算配置完成,可以在C++程序中以动态链接库的方式使用。
    后续学习test例子。


  • 相关阅读:
    (未完)【技术美术知识储备】纹理基础1.0(结合RTR4)
    笔试强训48天——day18
    shell 中单引号,双引号,反引号的区别
    Qt | 拖放、拖动的使用、将文件拖入使用示例
    设计模式入门笔记
    Insight h2database SQL like 查询
    架构面试-分布式存储系统HA高可用原理及应用案例实战
    ubuntu 22.04 图文安装
    Java CompletableFuture 并发编程
    阿里巴巴面试题- - -JVM篇(二十一)
  • 原文地址:https://blog.csdn.net/qq_26849933/article/details/126977899