最近在项目中使用了glog库控制log的输出,在此记录下glog库的编译和使用的过程。
1.从github上下载glog的源码。我们这里将源码下载到文件夹E:\3PartyLibrary下。
2.然后使用cmake-gui生成vs解决方案。如下图所示。
3.cmake的过程中需要注意图中6个用红色框框起来的部分。
第一个是源码路径,选择我们代码存放的位置。
第二个是生成解决方案的路径,我们在源码同级目录下创建一个文件夹,命名为glog-master-build。
第三个是BUILD_SHARED_LIBS,这个选项我们要勾上,因为我们需要动态库。
第四个是CMAKE_INSTALL_PREFIX,这个路径是install后生成的头文件和库文件存放的路径,这里我们在源码同级目录下创建一个文件夹,命名为glog-master-install。
第五个和第六个分别是WITH_GFLAGS和WITH_UNWIND,这两个我也不是很清楚是做什么的,但是如果把这两个勾上的话,在cmake的过程中就会报warning,因此都不勾。
4.之后分别点击Configure和Generate。
5.经过以上的cmake操作后,就会在build目录下(即glog-master-build文件夹)生成VS解决方案。
6.用VS打开该解决方案,并分别对ALL_BUILD和INSTALL两个项目进行编译,如下图所示。
7.编译过程应该不会有错误。编译成功后就在install目录下(即glog-master-install文件夹)生成头文件和库文件。如下图所示。
这里,为了代码目录结构清晰,我将上面生成的头文件放在了测试代码的external\glog文件夹中,将上面生成的.lib文件放在了测试代码的lib文件夹中,将上面生成的.dll文件放在工程所在文件夹中。
在使用vs新建项目后,需要将我们上面生成的头文件包含在项目的Include Directories中,将上面生成的库文件包含在项目的Library Directories中。如下图所示。
测试代码如下:
#ifndef GLOG_NO_ABBREVIATED_SEVERITIES #define GLOG_NO_ABBREVIATED_SEVERITIES // 如果不加这个宏定义我的代码就会报错,不知道别人是不是也有这个问题 #endif #include <glog\logging.h> #pragma comment(lib, "glog.lib") int main() { google::InitGoogleLogging("test"); FLAGS_alsologtostderr = true; FLAGS_colorlogtostderr = true; google::SetLogDestination(google::GLOG_INFO, "E:\\tool\\test\\logs\\INFO_"); google::SetLogDestination(google::GLOG_WARNING, "E:\\tool\\test\\logs\\WARNING_"); google::SetLogDestination(google::GLOG_ERROR, "E:\\tool\\test\\logs\\ERROR_"); google::SetLogDestination(google::GLOG_FATAL, "E:\\tool\\test\\logs\\FATAL_"); LOG(INFO) << "info"; LOG(WARNING) << "warning"; LOG(ERROR) << "error"; //LOG(FATAL) << "fatal"; google::ShutdownGoogleLogging(); return 0; }代码执行后,会在E:\tool\test\logs文件夹下生成三个log文件,这里我没有将FATAL也打印出来是因为当glog检测到"LOG(FATAL)<<"代码时就会直接结束程序,不继续执行后面的代码。
以上就是我使用glog的过程,在此记录分享。