Gflags是一种命令行解析工具,主要用于解析用命令行执行可执行文件时传入的参数。与getops()不同的是,在gflags中flag可以分散的定义在各个文件之中,而不用定义在一起,这就意味着在我们可以在一个单独的文件中只定义这个文件所需要用到的一些flag,链接了该文件应用都可以使用该文件中的flag,这样就能非常方便的实现代码的复用,如果不同的文件定义了相同的flag,则会产生错误,所以需要明确规范gflags的使用规范。
gflags在2008年首次推出,至今已有10年时间,目前有很多公司都在用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脚本搞定,当然就想这行命令所显示的,有些固定项我们也可以用配置文件,免得整个命令太长。
当然其他好处就是做模块隔离,这个跟宏相比的好处是动态运行时启动或者挂掉某些功能,而不需要重新编译。
通过github官方或通过git 命令clone
总用量 136
-rw-rw-r-- 1 zhouchen zhouchen 1447 7月 28 05:06 appveyor.yml
-rw-rw-r-- 1 zhouchen zhouchen 32 7月 28 05:06 AUTHORS.txt
drwxrwxr-x 3 zhouchen zhouchen 4096 7月 28 05:06 bazel/
-rw-rw-r-- 1 zhouchen zhouchen 629 7月 28 05:06 BUILD
-rw-rw-r-- 1 zhouchen zhouchen 13050 7月 28 05:06 ChangeLog.txt
drwxrwxr-x 2 zhouchen zhouchen 4096 7月 28 05:06 cmake/
-rw-rw-r-- 1 zhouchen zhouchen 29703 9月 21 17:45 CMakeLists.txt
-rw-rw-r-- 1 zhouchen zhouchen 1479 7月 28 05:06 COPYING.txt
drwxrwxr-x 2 zhouchen zhouchen 4096 7月 28 05:06 doc/
-rw-rw-r-- 1 zhouchen zhouchen 113 7月 28 05:06 .gitattributes
-rw-rw-r-- 1 zhouchen zhouchen 407 7月 28 05:06 .gitignore
-rw-rw-r-- 1 zhouchen zhouchen 4617 7月 28 05:06 INSTALL.md
-rw-rw-r-- 1 zhouchen zhouchen 13662 7月 28 05:06 README.md
drwxrwxr-x 2 zhouchen zhouchen 4096 7月 28 05:06 src/
drwxrwxr-x 4 zhouchen zhouchen 4096 7月 28 05:06 test/
-rw-rw-r-- 1 zhouchen zhouchen 409 7月 28 05:06 .travis.yml
-rw-rw-r-- 1 zhouchen zhouchen 255 7月 28 05:06 WORKSPACE
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)
gflags_define (BOOL BUILD_TESTING "Enable build of the unit tests and their execution using CTest." ON ON)
cd gflags-master
mkdir build
cd build
cmake ..
make
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
到此,Gflags就算配置完成,可以在C++程序中以动态链接库的方式使用。
后续学习test例子。