这里直接使用包管理器安装:
sudo apt install libgflags-dev
格式: DEFINE_类型名(变量名, 默认值, 描述语)
类型 | 定义格式 |
---|---|
bool类型 | DEFINE_bool |
32位的int类型 | DEFINE_int32 |
64位的int类型 | DEFINE_int64 |
64位的unsigned int 类型 | DEFINE_uint64 |
double类型 | DEFINE_double |
string类型 | DEFINE_string |
例子:
DEFINE_string(name, "xiaoming", "this is the name who you love! ");
DEFINE_bool(uppercase, true, "Whether the output characters are in Uppercase format! ");
DEFINE_int32(count, 10, "Number of times the output is repeated! ");
--uppercase=true 或者 --uppercase
--uppercase=false 或者 --nouppercase
--name="china" 或者 --name "China"
--count=10 或者 --count 10
在代码中使用之前定义好的变量时,在每一个变量名前加FLAGS_的前缀就可以了.
定义的变量名 | 代码中使用的变量名 |
---|---|
name | FLAGS_name |
uppercase | FLAGS_uppercase |
count | FLAGS_count |
#include <iostream>
#include <gflags/gflags.h>
using namespace std;
// 定义三个变量
DEFINE_string(name, "xiaoming", "this is the name who you love! ");
DEFINE_bool(uppercase, true, "Whether the output characters are in Uppercase format! ");
DEFINE_int32(count, 10, "Number of times the output is repeated! ");
// 绑定对变量name和count的值合法性的检测函数
static bool ValidateName(const char* flagname, const string& value);
DEFINE_validator(name, &ValidateName);
static bool ValidateCount(const char* flagname, int value);
DEFINE_validator(count, &ValidateCount);
/** @brief 主函数 */
int main(int argc, char* argv[])
{
// 进行解析命令行参数,true表示会修改argc和argv的值, 把相应的命令行参数去除掉。
gflags::ParseCommandLineFlags(&argc, &argv, true);
if (FLAGS_uppercase)
{
for (int i = 0; i < FLAGS_count; ++i)
cout << "I LOVE " << FLAGS_name << endl;
}
else
{
for (int i = 0; i < FLAGS_count; ++i)
cout << "i love " << FLAGS_name << endl;
}
return 0;
}
/** @brief 定义对变量name值合法性的检测函数 */
static bool ValidateName(const char* flagname, const string& value)
{
if (value.empty())
{
cout << "不应该输入空的参数值(" << flagname << " 的值为空) " << endl << endl;
return false;
}
return true;
}
/** @brief 定义对变量count值的合法性检测函数。 */
static bool ValidateCount(const char* flagname, int value)
{
if (value <= 0)
{
cout << "不应该输入小于或等于0的参数值(" << flagname << " 的值<= 0) " << endl << endl;
return false;
}
return true;
}
cmake_minimum_required(VERSION 3.10.2)
project(gflag_demo VERSION 1.0.0)
add_executable(demo.out demo.cpp)
find_package(gflags REQUIRED)
target_link_libraries(demo.out gflags)
mkdir build
cd build
cmake ..
make
./demo.out --uppercase=false --name="China" --count=10
输出为:
i love China
i love China
i love China
i love China
i love China
i love China
i love China
i love China
i love China
i love China
原文:https://www.cnblogs.com/yinheyi/p/12236412.html