目錄
- gflags 介紹
- gflags 安裝
- gflags 使用
gflags 介紹
gflags 是Google 開發的一個開源庫,用于 C++應用程序中命令行參數的聲明、定義和解析。gflags 庫提供了一種簡單的方式來添加、解析和文檔化命令行標志(flags),使得程序可以根據不同的運行時配置進行調整。
它具有如下幾個特點:
- 易于使用: gflags 提供了一套簡單直觀的 API 來定義和解析命令行標志,使得開發者可以輕松地為應用程序添加新的參數。
- 自動幫助和文檔: gflags 可以自動生成每個標志的幫助信息和文檔,這有助于用戶理解如何使用程序及其參數。
- 類型安全: gflags 支持多種數據類型的標志,包括布爾值、整數、字符串等,并且提供了類型檢查和轉換。
- 多平臺支持: gflags 可以在多種操作系統上使用,包括Windows、Linux和macOS
- 可擴展性: gflags 允許開發者自定義標志的注冊和解析邏輯,提供了強大的擴展性
gflags 安裝
直接命令安裝:
apt-get install libgflags-dev
檢測是否安裝成功
gflags 使用
1.包含頭文件:
#include <gflags/gflags.h>
2.定義參數:
利用gflag提供的宏定義來定義參數。該宏的3個參數分別為命令行參數名, 參數默認值, 參數的幫助信息
DEFINE_bool(reuse_addr, true, "是否開始網絡地址重用選項");
DEFINE_int32(log_level, 1, "日志等級:1-DEBUG, 2-WARN, 3-ERROR");
DEFINE_string(log_file, "stdout", "日志輸出位置設置,默認為標準輸出");
3.訪問參數
我們可以在程序中通過FLAGS_name像正常變量一樣訪問標志參數。比如在上面的例子中,我們可以通過 FLAGS_reuse_addr 和 FLAGS_log_level 變量來訪問命令行參數。
4.初始化所有參數
當我們定義好參數后,需要告訴可執行程序去處理解析命令行傳入的參數,使得FLAGS_*變量能得到正確賦值。我們需要在 main 函數中,調用下面的函數來解決命令行傳入的所有參數。
google::ParseCommandLineFlags(&argc, &argv, true);
- argc 和 argv 就是 main 的入口參數
- 第三個參數被稱為 remove_flags。如果它為true,表示ParseCommandLineFlags 會從 argv 中移除標識和它們的參數,相應減少 argc 的值。如果它為 false,ParseCommandLineFlags 會保留 argc 不變,但將會重新調整它們的順序,使得標識再前面。
示例:
#include <iostream>
#include <gflags/gflags.h>DEFINE_string(ip, "127.0.0.1", "這是服務器的監聽IP地址, 格式: 127.0.0.1");
DEFINE_int32(port, 8080, "這是服務器的監聽端口, 格式: 8080");
DEFINE_bool(debug_enable, true, "是否啟用調試模式, 格式: true/false");int main(int argc, char* argv[])
{google::ParseCommandLineFlags(&argc, &argv, true);std::cout << FLAGS_ip << std::endl;std::cout << FLAGS_port << std::endl;std::cout << FLAGS_debug_enable << std::endl;return 0;
}
運行結果:
不用默認參數進行設置
一種場景: 命令行如果需要參數, 則要手敲參數, 如果參數很多, 就很麻煩了, 所以它還支持配置文件
5.配置文件的使用
配置文件的使用,其實就是為了讓程序的運行參數配置更加標準化,不需要每次運行的時候都手動收入每個參數的數值,而是通過配置文件,一次編寫,永久使用。需要注意的是,配置文件中選項名稱必須與代碼中定義的選項名稱一致。
樣例:
-reuse_addr=true
-log_level=3
-log_file=./log/main.log
運行結果: