gFlags 测试与使用

github https://github.com/gflags/gflags
使用手册: https://gflags.github.io/gflags/

使用示例:
cmakelist:

cmake_minimum_required(VERSION 3.0 FATAL_ERROR)
project(test_gflags)
 
SET(CMAKE_BUILD_TYPE Debug)
 
#gflags
include_directories(/data_2/lib/gflags/include/)
link_directories(/data_2/lib/gflags/lib)

add_executable(main main.cpp)
target_link_libraries(main gflags)
set_property(TARGET main PROPERTY CXX_STANDARD 11)

main.cpp

#include<iostream>
#include "gflags/gflags.h"
using namespace std;

DEFINE_bool(b_ok, true, "true or false");
DEFINE_string(languages, "english,french,german",
              "comma-separated list of languages to offer in the 'lang' menu");
DEFINE_int32(size,1000,"size");

int main(int argc, char** argv)
{
    google::ParseCommandLineFlags(&argc, &argv, true);
    std::cout << "FLAGS_b_ok=" << FLAGS_b_ok << std::endl;
    std::cout <<"FLAGS_languages=" << FLAGS_languages << std::endl;
    std::cout <<"FLAGS_size=" << FLAGS_size << std::endl;


    return 0;
}

直接运行输出如下:

FLAGS_b_ok=1
FLAGS_languages=english,french,german
FLAGS_size=1000

终端命令运行:

./main --b_ok=false --languages="chinese" --size=90
FLAGS_big_menu=0
FLAGS_languages=chinese
FLAGS_languages=90



$ ./main --b_ok=false --languages="chinese" --size=90 --he=1
ERROR: unknown command line flag 'he'

gflags 暂时支持如下参数的类型:

DEFINE_bool: boolean
DEFINE_int32: 32-bit integer
DEFINE_int64: 64-bit integer
DEFINE_uint64: unsigned 64-bit integer
DEFINE_double: double
DEFINE_string: C++ string

访问参数

通过 FLAGS_name 像正常变量一样访问标志参数。比如代码中:
FLAGS_b_ok
FLAGS_languages
FLAGS_size

初始化所有参数 google::ParseCommandLineFlags(&argc, &argv, true);

定义好参数后,最后要告诉执行程序去处理命令行传入的参数,使得 FLAGS_*参数们得到正确赋值。
通常是再main()函数中调用;
google::ParseCommandLineFlags(&argc, &argv, true);
argc和argv就是 main 的入口参数,因为这个函数会改变他们的值,所以都是以指针传入。
第三个参数被称为remove_flags。如果它是true,ParseCommandLineFlags会从argv中移除标识和它们的参数,相应减少argc的值。然后 argv 只保留命令行参数。
相反,remove_flags是false,ParseCommandLineFlags会保留argc不变,但将会重新调整它们的顺序,使得标识再前面。

好记性不如烂键盘---点滴、积累、进步!
原文地址:https://www.cnblogs.com/yanghailin/p/15788671.html