【gflags】安裝與使用

gflags

  • 1. 介紹
  • 2. 安裝
  • 3. 使用
    • 3.1 頭文件
    • 3.2 定義參數
    • 3.3 訪問參數
    • 3.4 不同文件訪問參數
    • 3.5 初始化所有參數
    • 3.6 運行參數設置
    • 3.7 配置文件的使用
    • 3.8 特殊參數標識

1. 介紹

gflags 是 Google 開發的一個開源庫,用于 C++ 應用程序中命令行參數的聲明、定義和解析。gflags 庫提供了一種簡單的方式來添加、解析和文檔化命令行標志(flags),使得程序可以根據不同的運行時配置進行調整。

它具有如下幾個特點:

  • 易于使用:gflags 提供了一套簡單直觀的 API 來定義和解析命令行標志,使得開發者可以輕松地為應用程序添加新的參數。
  • 自動幫助和文檔:gflags 可以自動生成每個標志的幫助信息和文檔,這有助于用戶理解如何使用程序及其參數。
  • 類型安全:gflags 支持多種數據類型的標志,包括布爾值、整數、字符串等,并且提供了類型檢查和轉換。
  • 多平臺支持:gflags 可以在多種操作系統上使用,包括 Windows、Linux 和
    macOS。
  • 可擴展性:gflags 允許開發者自定義標志的注冊和解析邏輯,提供了強大的擴展性。

官方文檔: https://gflags.github.io/gflags/
代碼倉庫:https://github.com/gflags/gflags.git

2. 安裝

sudo apt install libgflags-dev

3. 使用

3.1 頭文件

使用 gflags 庫來定義/解析命令行參數必須包含如下頭文件

#include<gflags/gflags.h>

3.2 定義參數

利用 gflag 提供的宏定義來定義參數。該宏的 3 個參數分別為命令行參數名,參數默認值,參數的幫助信息。

DEFINE_string(ip,"127.0.0.1","這是服務器的ip地址");
DEFINE_int32(port,8080,"這是服務器的端口");
DEFINE_bool(debug_flag,true,"是否啟動調試");

gflags 支持定義多種類型的宏函數

DEFINE_bool
DEFINE_int32
DEFINE_int64
DEFINE_uint64
DEFINE_double
DEFINE_string

3.3 訪問參數

我們可以在程序中通過 FLAGS_name 像正常變量一樣訪問標志參數。比如在上面的例子中,我們可以通過 FLAGS_ip 和 FLAGS_port 變量來訪問命令行參數。

3.4 不同文件訪問參數

如果想再另外一個文件訪問當前文件的參數,以參數 FLAGS_ip 為例,我們可以使用用宏 DECLARE_string(ip)來聲明引入這個參數。其實這個宏就相當于做了 extern FLAGS_ip, 定義外部鏈接屬性。

3.5 初始化所有參數

當我們定義好參數后,需要告訴可執行程序去處理解析命令行傳入的參數,使得
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地址");
DEFINE_int32(port,8080,"這是服務器的端口");
DEFINE_bool(debug_flag,true,"是否啟動調試");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_flag<<std::endl;return 0;
}
main:main.ccg++ -o $@ $^ -std=c++17 -lgflags

在這里插入圖片描述

3.6 運行參數設置

gflags 為我們提供了多種命令行設置參數的方式。

string 和 int 設置參數

exec --log_file=“./main.log”
exec -log_file=“./main.log”
exec --log_file “./main.log”
exec -log_file “./main.log”

bool 設置參數

exec --reuse_addr
exec --noreuse_addr
exec --reuse_addr=true
exec --reuse_addr=false

./main --ip="192.168.1.1" --port=9090 --debug_flag=false

在這里插入圖片描述

3.7 配置文件的使用

配置文件的使用,其實就是為了讓程序的運行參數配置更加標準化,不需要每次運行的時候都手動收入每個參數的數值,而是通過配置文件,一次編寫,永久使用。
需要注意的是,配置文件中選項名稱必須與代碼中定義的選項名稱一致。

在這里插入圖片描述

-ip=192.168.2.2
-port=7878
-debug_flag=true

在這里插入圖片描述

3.8 特殊參數標識

gflags 也默認為我們提供了幾個特殊的標識。

--help # 顯示文件中所有標識的幫助信息
--helpfull # 和-help 一樣, 幫助信息更全面一些
--helpshort # 只顯示當前執行文件里的標志
--helpxml # 以 xml 方式打印,方便處理
--version # 打印版本信息,由 google::SetVersionString()設定
--flagfile -flagfile=f #從文件 f 中讀取命令行參數

比如不知道有什么參數,可以使用–help進行查看

在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/97321.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/97321.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/97321.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

基于MATLAB的三維TDOA定位算法仿真實現

一、算法原理與仿真框架 三維TDOA&#xff08;Time Difference of Arrival&#xff09;定位通過測量信號到達多個基站的時間差&#xff0c;結合幾何關系反演目標位置。其核心步驟包括&#xff1a;幾何建模&#xff1a;建立目標與基站間的距離差方程&#xff0c;形如下式&#x…

Linux-搭建DNS服務器

Linux-搭建DNS服務器1. 安裝軟件bind2.修改配置文件3. 在其他機器上測試DNS服務器4. 配置本地域名解析5. 優化后的zone1. 安裝軟件bind bind是歷史非常悠久&#xff0c;而且性能非常好的dns域名系統的軟件 [rootdns-server ~]# yum install bind bind-utils -y 啟動named服務 …

從全棧開發視角看Java與前端技術融合實踐

從全棧開發視角看Java與前端技術融合實踐 面試場景記錄&#xff1a;一次真實的面試對話 面試官&#xff1a;你好&#xff0c;很高興見到你。我是這次面試的負責人&#xff0c;可以簡單介紹一下你自己嗎&#xff1f; 應聘者&#xff1a;您好&#xff0c;我叫李明&#xff0c;今年…

第二階段WinForm-11:自定義控件

1_繼承鏈 &#xff08;1&#xff09;Form1的繼承鏈&#xff1a;Form1>Form>ContainerControl>ScrollableControl>Control &#xff08;2&#xff09;Button的繼承鏈&#xff1a;Button>ButtonBase>Control>Component 2_自定義控件 &#xff08;1&…

【2025 完美解決】Failed connect to github.com:443; Connection timed out

文章目錄前言1. 生成并上傳 SSH Key2. 寫 SSH 配置&#xff0c;強制走 ssh.github.com:4433. 連通性自檢&#xff08;看是否能握手成功&#xff09;4. 克隆5. 驗證前言 今天和往常一樣&#xff0c;寫完代碼&#xff0c;準備 push 到 github 倉庫中&#xff0c;結果發現一直卡在…

C++基礎(③反轉字符串(字符串 + 雙指針))

題目描述&#xff1a;編寫一個函數&#xff0c;將輸入的字符串反轉過來&#xff08;要求原地修改字符串&#xff0c;不使用額外空間&#xff09;。 示例&#xff1a;輸入 s ["h","e","l","l","o"] → 輸出 ["o",…

vue的動態組件keep-alive實現組件緩存和狀態保留

在 Vue.js 中&#xff0c;動態組件結合 keep-alive 是實現組件緩存和狀態保留的重要技術方案。以下是詳細解析&#xff1a;一、動態組件基礎 通過 <component :is> 實現組件動態切換&#xff1a; <component :is"currentComponent"></component>cu…

安裝Docker Desktop報錯WSL needs updating

&#xff08;1&#xff09;首先觀察下面是否勾選&#xff08;2&#xff09;說明已經啟動了&#xff0c;但是需要更新&#xff0c;cmd運行下面代碼&#xff0c;記得需要開一下代理&#xff0c;可能會有點慢上面就算好了&#xff08;3&#xff09;點擊restart這樣就代表成功了

??舊衣回收小程序|線上模式新升級

還在用老舊的傳統方式做舊衣回收&#xff1f;別out了&#xff01;線下回收箱成本高、維護難、用戶參與感弱&#xff1f;是時候用線上小程序打開全新局面了?&#x1f4a8;線上小程序 vs 傳統線下回收? 便捷性突破&#xff1a;線下&#xff1a;用戶需親自送至固定回收點&#x…

CD71.【C++ Dev】二叉樹的三種非遞歸遍歷方式

目錄 1.知識回顧 2.前序遍歷 分析 總結入棧的幾種可能 循環的條件 代碼 提交結果 3.中序遍歷 分析 代碼 提交結果 3.★后序遍歷 分析 問題:如何確定是第一次訪問到棧的元素還是第二次訪問到棧中的元素? 方法1:使用填充的內存(依賴于架構) 判斷計算機使用的架構…

音視頻學習(五十九):H264中的SPS

在 H.264 (也稱為 AVC, Advanced Video Coding) 視頻編碼標準中&#xff0c;SPS (Sequence Parameter Set) 是一個至關重要的 NALU (Network Abstraction Layer Unit) 類型&#xff0c;它承載著整個視頻序列共有的全局性配置信息。你可以把它理解為視頻文件的“基因”&#xff…

linux實時性研究

Linux 實時性研究旨在提升 Linux 系統對外部事件的響應速度和確定性,使其能夠滿足實時應用的需求。以下是關于 Linux 實時性研究的一些關鍵內容: Linux 實時性不足的原因 中斷優先級問題:在標準 Linux 內核中,中斷具有最高優先級,包括軟中斷,這使得實時任務的優先級得不到…

Java-面試八股文-Mysql篇

MySQL篇 1、Select 語句完整的執行順序 難度系數&#xff1a;?&#x1f4cc; SQL SELECT 語句書寫順序&#xff08;開發者寫的順序&#xff09; SELECT ... FROM ... JOIN ... WHERE ... GROUP BY ... HAVING ... ORDER BY ... LIMIT ...&#x1f4cc; 實際執行順序&#…

多代理系統架構:Supervisor 與 Swarm 架構詳解

多代理&#xff08;Multi-Agent&#xff09;系統正成為構建復雜 AI 應用的重要范式。本文將深入剖析兩種熱門的多代理架構模式——Supervisor&#xff08;主管模式&#xff09;與 Swarm&#xff08;群智模式&#xff09;&#xff0c;揭示它們的執行流程、適用場景及實現細節&am…

【深度學習】思維鏈(Chain of Thought, CoT):提升大模型推理能力的關鍵技術

思維鏈&#xff08;Chain of Thought, CoT&#xff09;&#xff1a;提升大模型推理能力的關鍵技術 文章目錄思維鏈&#xff08;Chain of Thought, CoT&#xff09;&#xff1a;提升大模型推理能力的關鍵技術1 什么是思維鏈&#xff08;Chain of Thought, CoT&#xff09;&#…

GitHub 宕機自救指南:打造韌性開發體系

一、引言1.1 GitHub 宕機事件回顧與影響剖析在軟件開發的廣袤版圖中&#xff0c;GitHub 宛如一座熠熠生輝的燈塔&#xff0c;為全球超 1 億開發者照亮前行之路&#xff0c;其重要性不言而喻。它集代碼托管、版本控制、協作開發以及項目管理等核心功能于一身&#xff0c;是無數開…

移動端網頁調試實戰,iOS WebKit Debug Proxy 的應用與替代方案

在移動端開發中&#xff0c;iOS WebView 的調試一直是個難題。不同于 Android 可以依賴 Chrome DevTools 和 ADB&#xff0c;iOS 的 WKWebView 只能通過 Safari 開發者工具調試&#xff0c;而這需要 Mac 環境和設備直連。為了彌補限制&#xff0c;社區出現了一個常用工具 —— …

煥新升級,Sermant 2.0.0 release版本重磅發布!

Sermant社區在6月底正式發布了2.0.0 release版本&#xff0c;這次更新中&#xff0c;Sermant進行了項目所屬組織調整并新增了基于xDS協議的服務發現能力、預過濾啟動加速機制、Sermant Backend的配置管理能力。所屬組織調整使得Sermant淡化廠商屬性&#xff0c;以全新的姿態更好…

sqli-labs通關筆記-第28a關GET字符注入(多重關鍵字過濾繞過 腳本法)

目錄 一、sqlmap之tamper腳本 二、源碼分析 1、代碼審計 2、SQL安全性分析 三、滲透實戰 1、進入靶場 2、tamper腳本 3、sqlmap滲透 SQLI-LABS 是一個專門為學習和練習 SQL 注入技術而設計的開源靶場環境&#xff0c;本小節對第28a關Less 28a基于GET字符型的SQL注入關卡…

聯想打印機2268w安裝

聯想打印機2268w是支持無線打印的。在某度搜索&#xff0c;掀起蓋子長按開機鍵&#xff0c;成功初始化。之后按說明應該能用手機搜索到打印機的熱點&#xff0c;反復搜索都沒有出現。最后沒辦法&#xff0c;之后好用我自己的方法安裝。找了個筆記本&#xff0c;開機連接到wifi,…