吭呲了倆小時搞定,這效率真夠可以的。扒一堆部落格,個個寫的都不爽利。
預備:vs2017、cmake、glog
cmake安裝檔案去官網找,個人下載下傳的msi檔案直接安裝的,安裝時預設是不添加到環境變量,修改為為所有使用者添加到環境變量。本地安裝完成後,cmd檢視:cmake --version。
glog從github下載下傳。
glog檔案夾下打開cmd,依次指令:
cmake .
cmake --build .
編譯成功後,會自動生成本機vs對應版本的lib庫:glog\Debug\glogd.lib,預設生成win32的debug庫。
将檔案夾glog\src\windows\glog與上述lib檔案拷貝到建立項目中,工程添加宏定義:
GLOG_NO_ABBREVIATED_SEVERITIES
GOOGLE_GLOG_DLL_DECL=
然後就可以正常使用了。
#include "pch.h"
#include <iostream>
#include "glog/logging.h"
int main(int argc, char* argv[])
{
system("mkdir Log && cd Log && mkdir info warning error fatal");
google::InitGoogleLogging("");
google::SetLogDestination(google::GLOG_INFO,"Log/info/");
google::SetLogDestination(google::GLOG_WARNING, "Log/warning/");
google::SetLogDestination(google::GLOG_ERROR, "Log/error/");
google::SetLogDestination(google::GLOG_FATAL, "Log/fatal/");
LOG(INFO) << "info 005";
LOG(WARNING) << "warning 005";
LOG(ERROR) << "error 005";
//LOG(FATAL) << "fatal 005";
google::ShutdownGoogleLogging();
return 0;
}
如果想生成x64的debug或者release庫,可以修改glog中cmake配置檔案生成其它平台的lib庫(我不會,第一次接觸cmake,有點懵,這玩意跨平台能力這麼強,相信以後肯定會普及起來的!),也可以使用cmake gui工具生成。
注:Optional toolset to use填入:host=x64(其它部落格寫了這一點,截圖時忘了。不過我沒寫,也照樣生成行x64位的了);點選Configure執行完畢後,再點選Gernerate,會生成sln解決方案,打開sln後編譯一下工程,再拷貝生成的64位的 lib 和 lib/dll 使用。
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLiAzNfRHLGZkRGZkRfJ3bs92YsYTMfVmepNHL9sGWapnTYV2a5IDW0olMMBjVtJWd0ckW65UbM5WOHJWa5kHT20ESjBjUIF2X0hXZ0xCMx81dvRWYoNHLrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdssmch1mclRXY39CXldWYtlWPzNXZj9mcw1ycz9WL49zZuBnL1UzNzIDOwUTMxATMxkTMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
下圖箭頭所指地方,如果打勾,debug和release都會生成 lib+dll;如果不打勾,僅生成lib。
用的時候發現低級别日志會記錄進階别日志,若要改動,參考一篇部落格,然後重新cmake,生成新的lib庫進行使用。
另外,glog個人沒有找到格式化輸出設定,可以參考另一篇部落格,我直接将倆功能函數添加進使用工程的 logging.h 裡了。
即在logging.h中添加以下代碼:
template<typename T>
std::string pack_string(const T &value) {
std::stringstream ss;
ss << value;
return ss.str();
}
template<typename T, typename... Args>
std::string pack_string(const T &value, Args... args) {
std::stringstream ss;
ss << value << pack_string(args...);
return ss.str();
}
#define ADDTAG LOG(INFO) << pack_string("Enter ", __FUNCTION__);
#define ADDLEAVE LOG(INFO) << pack_string("Leave ", __FUNCTION__);
同時設定:項目工程----> 屬性 ---> c/c++ --> 語音 --> 符合模式 修改成否。