gflag的编译和使用
概述
glog的新版(>4.0)一定要包含gflag(因为要设置一些glog内部变量, 否则无法保存成日志文件), 否则不能正常使用。
先将gflag编译出来。
笔记
库地址 https://github.com/gflags/gflags.git
迁出到本地,切到最新的发布版 Release v2.2.2
CMake用的3.29, 编译旧版CMakeLists.txt有版本警告。
将CMakeLists.txt中的最小版本改了。
用cmake-gui.exe编译
只生成dll, 不生成静态库工程。
原因是gflag是多字节工程,无法作为静态库包含在默认的unicode工程中用。
选择为VS2019x64, 配置,产生工程
打开 gflags.sln
分别编译Debug/release版,给自己的Debug/Realse APP用。
如果自己的Debug版APP包含gflag的Release版dll, 会报错,有异常发生。
全部编译
运行测试(重新生成RUN_TESTS), 看到测试100%通过。
安装(重新生成INSTALL工程)
得到发布包
这时,就可以将发布包存档,分别命令为gflags_x64_debug/gflags_x64_release然后包进自己工程用。
官方文档
https://gflags.github.io/gflags/
测试工程
vs2019
// testGflagsConsole.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//
#include <iostream>
#define STRIP_FLAG_HELP 1
#include "gflags/gflags.h"
#if (defined(_WIN64) && defined(_DEBUG))
#pragma comment(lib, "gflags_nothreads_debug.lib")
#pragma comment(lib, "gflags_debug.lib")
#elif (defined(_WIN64) && defined(NDEBUG))
#pragma comment(lib, "gflags_nothreads.lib")
#pragma comment(lib, "gflags.lib")
#endif
DECLARE_string(message1); // 声明其他文件定义的变量, 如果要用到,其他文件中就要有对应的DEFINE_x, 否则编译报错
DEFINE_string(message, "val", "text"); // 自己作用域定义的变量
using GFLAGS_NAMESPACE::SetUsageMessage;
using GFLAGS_NAMESPACE::ParseCommandLineFlags;
int main(int argc, char** argv) {
SetUsageMessage("Usage message");
ParseCommandLineFlags(&argc, &argv, false);
printf("%s\n", FLAGS_message.data());
return 0;
}