glog是一个Google的轻量、稳定、开源的日志系统库,用于实现应用级别的logging。 它提供了一系列类似于C++流风格的logging API,以及一些预定义的宏。有点类似于C语言里面的assert,但是比assert具备更丰富的输出信息以及使用灵活性。
glog不依赖其他库,视具体情况依赖gflags(可选)。
非必选,gflags环境配置可参考Win10系统VS2019+Cmake+gflags2.2.2环境配置。
glog源码地址:
github:https://github.com/google/glog.git
gitee:https://gitee.com/sabertot/glog.git
源代码路径:D:/ThirdParty/glog/glog_0.4.0
构建项目路径:D:/ThirdParty/glog/glog_0.4.0_build
| 名称 | 值 | 备注 |
|---|---|---|
| BUILD_TESTING | false | 减少编译时间 |
| CMAKE_INSTALL_PREFIX | path | 编译时生成的安装文件路径 |
| BUILD_SHARED_LIBS | true | 生成dll动态库 |
| WITH_GFLAGS | true | 使用gflags,需要事先安装好gflags |
| gflags_DIR | path | $(gflags)/lib/cmake/gflags |
步骤如下:
- 指定源码路径;
- 指定构建项目路径;
- 点击Configure;
- 按照2.2节表中的值进行设置;
- 再次点击Configure;
- 点击Generate,构建项目路径中将生成解决方案文件glog.sln。
3. 打开解决方案并编译 3.1 编译解决方案点击Configure或Generate后,如果顺利,会出现Configuring done或Generating done。
点击Open Project(或者在2.3节步骤2中指定的构建项目路径中,找到生成的解决方案文件glog.sln,通过Visual Studio打开),打开通过Cmake构建的项目;
选中ALL_BUILD项目,分别在Debug和Release模式下,重新生成解决方案。
选中INSTALL项目,右击,重新生成,此时,将会在指定路径下(2.2节表中CMAKE_INSTALL_PREFIX选项的值)生成3个文件夹include,lib和bin。
注:以下通过属性表的方式进行环境配置。
- $(glog)include
$(glog)(在系统环境变量中添加并设置)就是2.2节表中CMAKE_INSTALL_PREFIX选项的值。
4.2 附加库目录可根据实际情况进行配置gflag,若2.2节表中WITH_GFLAGS选项为true,那么需要进行配置,后面库目录、附加依赖项也是一样,gflags环境配置方法参见1.2.1。
- $(glog)lib
- glogd.lib或glog.lib
将库目录$(glog)lib中文件后缀名为.lib的文件依次添加至附加依赖项中,并依次配置debug版本(有d后缀)和release版本。
4.4 动态库注意,添加附加依赖项时,不要漏掉文件后缀名.lib!
将动态库目录添加至系统环境变量Path,步骤如下:
- 计算机右击,点击“属性”;
- 点击“高级系统设置”;
- 点击“环境变量”;
- 双击Path;
- 添加%glog%bin,该目录下是包含了动态库文件。
本文使用的都是相对路径,因此需事先设置好环境变量glog,值为CMAKE_INSTALL_PREFIX对应的目录,也可以使用绝对路径。
#include#include DEFINE_int32(port, 111, "Host name"); //检查函数,检查函数是否符合要求 static bool ValidatePort(const char* name, int32_t val) { if (val > 0 && val < 2000) return true; std::cout << "Invalid value for --" << name << ": " << val << std::endl; return false; } // 使用全局 static 变量来注册函数,static 变量会在 main 函数开始时就调用 //必须在main开始时进行注册,否则无法监测命令行参数 static const bool port_dummy = gflags::RegisterFlagValidator(&FLAGS_port, &ValidatePort); int main(int argc, char** argv) { //初始化参数 gflags::ParseCommandLineFlags(&argc, &argv, true); std::cout << "the server port is: " << FLAGS_port << std::endl; // 使用 SetCommandLineOption 函数对参数进行设置才会调用检查函数 gflags::SetCommandLineOption("port", "-3"); std::cout << "the server port is: " << FLAGS_port << std::endl; //std::system("pause"); return 0; }



