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不变,但将会重新调整它们的顺序,使得标识再前面。