#include <gflags/gflags.h>
2.將須要的命令行參數使用gflags的宏:DEFINE_xxxxx(變量名,默認值,help-string) 定義在文件當中,注意全局域哦。gflags支持如下類型:html
DEFINE_bool: boolean DEFINE_int32: 32-bit integer DEFINE_int64: 64-bit integer DEFINE_uint64: unsigned 64-bit integer DEFINE_double: double DEFINE_string: C++ string
3.在main函數中加入:python
google::ParseCommandLineFlags(&argc, &argv, true);
argc和argv想必你們都很清楚了,說明如下第三個參數的做用:c++
若是設爲true,則該函數處理完成後,argv中只保留argv[0],argc會被設置爲1。git
若是爲false,則argv和argc會被保留,可是注意函數會調整argv中的順序。函數
4.這樣,在後續代碼中可使用FLAGS_變量名訪問對應的命令行參數了ui
printf("%s", FLAGS_mystr);
5.最後,編譯成可執行文件以後,用戶可使用:executable --參數1=值1 --參數2=值2 ... 來爲這些命令行參數賦值。google
./mycmd --var1="test" --var2=3.141592654 --var3=32767 --mybool1=true --mybool2 --nomybool3
DECLARE_bool: boolean DECLARE_int32: 32-bit integer DECLARE_int64: 64-bit integer DECLARE_uint64: unsigned 64-bit integer DECLARE_double: double DECLARE_string: C++ string
在gflags的doc中,推薦在對應的.h文件中進行DECLARE_xxx聲明,須要使用的文件直接include就好了。
static bool ValidatePort(const char* flagname, int32 value) { if (value > 0 && value < 32768) // value is ok return true; printf("Invalid value for --%s: %d\n", flagname, (int)value); return false; } DEFINE_int32(port, 0, "What port to listen on"); static const bool port_dummy = RegisterFlagValidator(&FLAGS_port, &ValidatePort);
3.判斷flags變量是否被用戶使用:在gflags.h中,還定義了一些日常用不到的函數和結構體。這裏舉一個例子,判斷參數port有沒有被用戶設定過
spa
google::CommandLineFlagInfo info; if(GetCommandLineFlagInfo("port" ,&info) && info.is_default) { FLAGS_port = 27015; }
4.定製你本身的help信息與version信息:(gflags裏面已經定義了-h和--version,你能夠經過如下方式定製它們的內容)命令行
version信息:使用google::SetVersionString設定,使用google::VersionString訪問
help信息:使用google::SetUsageMessage設定,使用google::ProgramUsage訪問
注意:google::SetUsageMessage和google::SetVersionString必須在google::ParseCommandLineFlags以前執行
參考:code