Ubuntu22.04 - gflags的安裝和使用

目錄

  • 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

在這里插入圖片描述

運行結果:
在這里插入圖片描述

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

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

相關文章

Git LFS介紹(Large File Storage)大文件擴展,將大文件存儲在外部存儲,倉庫中只記錄文件的元數據(大文件的指針,類似一個小的占位符文件)

文章目錄 LFS的功能&#xff1f;如何使用LFS&#xff1f;將大文件存儲在外部系統是什么意思&#xff1f;具體是如何運作的&#xff1f;為什么要這樣做&#xff1f; 對開發者的影響&#xff1f;1. **性能和效率**2. **協作體驗**3. **版本管理差異**4. **額外的工具和配置** LFS…

Fastgpt學習(5)- FastGPT 私有化部署問題解決

1.? 問題描述&#xff1a; Windows系統&#xff0c;本地私有化部署&#xff0c;postgresql數據庫鏡像日志持續報錯" data directory “/var/lib/postgresql/data” has invalid permissions "&#xff0c;“ DETAIL: Permissions should be urwx (0700) or urwx,gr…

2026考研趨勢深度解析:政策變化+高效工具指南

2026考研深度解析&#xff1a;趨勢洞察高效工具指南&#xff0c;助你科學備戰上岸 從政策變化到工具實戰&#xff0c;這份千字攻略解決99%考生的核心焦慮 【熱點引入&#xff1a;考研賽道進入“高難度模式”】 2025年全國碩士研究生報名人數突破520萬&#xff0c;報錄比預計擴…

娛樂使用,可以生成轉賬、圖片、聊天等對話內容

軟件介紹 今天要給大家介紹一款由吾愛大佬 lifeixue 開發的趣味軟件。它的玩法超豐富&#xff0c;能夠生成各式各樣的角色&#xff0c;支持文字聊天、發紅包、轉賬、發語音以及分享圖片等多種互動形式&#xff0c;不過在分享前得著重提醒&#xff0c;此軟件僅供娛樂&#xff0…

DeepSeek動畫視頻全攻略:從架構到本地部署

DeepSeek 本身并不直接生成動畫視頻,而是通過與一系列先進的 AI 工具和傳統軟件協作,完成動畫視頻的制作任務。這一獨特的架構模式,使得 DeepSeek 在動畫視頻創作領域發揮著不可或缺的輔助作用。其核心流程主要包括腳本生成、畫面設計、視頻合成與后期處理這幾個關鍵環節。 …

C++類與對象深度解析(一):從引用、內聯函數到構造析構的編程實踐

目錄 一.引用 引用的特征&#xff1a;1.引用必須初始化 2.本質是別名 3.函數參數傳遞 4.常引用 5.函數返回值 6.權限 放大 縮小 平移 引用 vs 指針 二.內聯函數 關鍵點說明 三.宏函數 四.類 什么是類&#xff1f; 簡單的類 五.構造函數與析構函數 1. 構造函數&…

vsan數據恢復—vsan緩存盤故障導致虛擬磁盤文件丟失的數據恢復案例

vsan數據恢復環境&故障&#xff1a; VMware vsan架構采用21模式。每臺設備只有一個磁盤組&#xff08;71&#xff09;&#xff0c;緩存盤的大小為240GB&#xff0c;容量盤的大小為1.2TB。 由于其中一臺主機&#xff08;0號組設備&#xff09;的緩存盤出現故障&#xff0c;導…

開源在線考試系統開源在線考試系統:支持數學公式的前后端分離解決方案

開源在線考試系統&#xff1a;支持數學公式的前后端分離解決方案 項目介紹項目概述&#xff1a;技術棧&#xff1a;版本要求主要功能&#xff1a;特色亮點 項目倉庫地址演示地址GiteeGitHub 系統效果展示教師端系統部分功能截圖學生端系統部分功能截圖 結語 項目介紹 項目概述…

redis解決高并發看門狗策略

當一個業務執行時間超過自己設定的鎖釋放時間&#xff0c;那么會導致有其他線程進入&#xff0c;從而搶到同一個票,所有需要使用看門狗策略&#xff0c;其實就是開一個守護線程&#xff0c;讓守護線程去監控key&#xff0c;如果到時間了還未結束&#xff0c;就會將這個key重新s…

新數據結構(12)——代理

什么是代理 在進行操作時有時不希望用戶直接接觸到目標&#xff0c;這時需要使用代理讓用戶間接接觸到目標 給目標對象提供一個代理對象&#xff0c;并且由代理對象控制著對目標對象的引用 圖解&#xff1a; 代理的目的 控制訪問&#xff1a;通過代理對象的方式間接的訪問目…

Unity Shader Graph 2D - Procedural程序化圖形之夾心圓環

前言 本文將使用Unity Shader Graph的節點來繪制一個夾心圓環,分成三部分外環、內環和中心環。通過制作一個夾心圓環能夠更好地理解和實踐Shader Graph中的基礎節點以及思維。 創建一個Ring的Shader Graph文件,再創建一個對應的材質球M_Ring以及一個Texture2D的MainT…

緩存三大問題及其解決方案

緩存三大問題及其解決方案 1. 前言 ? 在現代系統架構中&#xff0c;緩存與數據庫的結合使用是一種經典的設計模式。為了確保緩存中的數據與數據庫中的數據保持一致&#xff0c;通常會給緩存數據設置一個過期時間。當系統接收到用戶請求時&#xff0c;首先會訪問緩存。如果緩…

【算法】----多重背包問題I,II(動態規劃)

&#x1f339;作者:云小逸 &#x1f4dd;個人主頁:云小逸的主頁 &#x1f4dd;Github:云小逸的Github &#x1f91f;motto:要敢于一個人默默的面對自己&#xff0c;強大自己才是核心。不要等到什么都沒有了&#xff0c;才下定決心去做。種一顆樹&#xff0c;最好的時間是十年前…

LeetCode-524. 通過刪除字母匹配到字典里最長單詞

1、題目描述&#xff1a; 給你一個字符串 s 和一個字符串數組 dictionary &#xff0c;找出并返回 dictionary 中最長的字符串&#xff0c;該字符串可以通過刪除 s 中的某些字符得到。 如果答案不止一個&#xff0c;返回長度最長且字母序最小的字符串。如果答案不存在&#x…

TikTok賬戶安全指南:如何取消兩步驗證?

TikTok賬戶安全指南&#xff1a;如何取消兩步驗證&#xff1f; 在這個數字化的時代&#xff0c;保護我們的在線賬戶安全變得尤為重要。TikTok&#xff0c;作為全球流行的社交媒體平臺&#xff0c;其賬戶安全更是不容忽視。兩步驗證作為一種增強賬戶安全性的措施&#xff0c;雖…

面試題之箭頭函數和普通函數有什么區別?

箭頭函數&#xff08;Arrow Function&#xff09;和普通函數&#xff08;Regular Function&#xff09;是 JavaScript 中兩種不同的函數定義方式&#xff0c;它們在語法、上下文&#xff08;this&#xff09;、原型鏈等方面存在顯著區別。以下是它們的主要區別&#xff1a; 1. …

Llama 3.1 本地電腦部署 Linux系統 【輕松簡易】

本文分享在自己的本地電腦部署 llama3.1&#xff0c;而且輕松簡易&#xff0c;快速上手。 這里借助Ollama工具&#xff0c;在Linux系統中進行大模型部署~ Llama3.1&#xff0c;有三個版本&#xff1a;8B、70B、405B Llama 3.1 405B 是第一個公開可用的模型&#xff0c;在常識…

工業安全的智能哨兵:AI如何筑起生產線的“數字防火墻“

工業安全的智能哨兵:AI如何筑起生產線的"數字防火墻" (本文共1420字,閱讀約需4分鐘) 去年某石化廠的反應釜壓力數據出現異常波動,傳統監測系統在15分鐘后才發出警報——而AI模型在23秒前就已預警。這場未遂事故揭示了一個殘酷現實:工業安全監測正在經歷從&qu…

【Bert】自然語言(Language Model)入門之---Bert

every blog every motto: Although the world is full of suffering&#xff0c; it is full also of the overcoming of it 0. 前言 對bert進行梳理 論文&#xff1a; BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding 時間&#xff1a;…

Linux中使用Docker安裝DIFY搭建本地支持庫和Agent

Dify 是一款開源的大語言模型(LLM) 應用開發平臺。它融合了后端即服務&#xff08;Backend as Service&#xff09;和 LLMOps 的理念&#xff0c;使開發者可以快速搭建生產級的生成式 AI 應用。即使你是非技術人員&#xff0c;也能參與到 AI 應用的定義和數據運營過程中。 然而…