使用 Google gflags 简化命令行参数处理
生活随笔
收集整理的這篇文章主要介紹了
使用 Google gflags 简化命令行参数处理
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
(本文章僅適用于C++程序)
寫服務程序時,如果需要提供命令行參數。傳統的方法是手工解析argv參數,或者使用getopt函數。兩種方法都比較費勁。使用Google gflags可以大大簡化命令行參數處理。 安裝gflag 從官方地址http://code.google.com/p/google-gflags/下載gflags并安裝。比如我下載的是1.5版本。 [yichi@yichi tmp]$ wget?http://google-gflags.googlecode.com/files/gflags-1.5.tar.gz [yichi@yichi tmp]$ tar zxvf gflags-1.5.tar.gz [yichi@yichi tmp]$ cd gflags [yichi@yichi gflags-1.5]$ ./configure –prefix=$HOME/google-library [yichi@yichi gflags-1.5]$ make j=4 & make install 使用gflags 示例代碼下載地址:http://www.faithbee.com/wp-content/uploads/2011/05/gflags-sample.tar.bz2 main.cc // Copyright (c) 2011, D-Media Communication Technology Inc.// All rights reserved.////// ---// Author: Yichi Zhang <zyichi@gmail.com>//// File content description here#include "server.h"#include <google/gflags.h>#include <string>#include <stdio.h>DEFINE_bool(memory_pool, false, "If use memory pool"); DEFINE_bool(daemon, true, "If started as daemon"); DEFINE_string(module_id, "", "Server module id");DEFINE_int32(http_port, 80, "HTTP listen port"); DEFINE_int32(https_port, 443, "HTTPS listen port");int main(int argc, char** argv) {::google::ParseCommandLineFlags(&argc, &argv, true);// XXX NOTE: Should add 'FLAGS_' prefix.printf("Server module id: %s\n", FLAGS_module_id.c_str());if (FLAGS_daemon) {printf("Run as daemon: %d\n", FLAGS_daemon);}if (FLAGS_memory_pool) {printf("Use memory pool: %d\n", FLAGS_daemon);}Server server;return 0; }
寫服務程序時,如果需要提供命令行參數。傳統的方法是手工解析argv參數,或者使用getopt函數。兩種方法都比較費勁。使用Google gflags可以大大簡化命令行參數處理。 安裝gflag 從官方地址http://code.google.com/p/google-gflags/下載gflags并安裝。比如我下載的是1.5版本。 [yichi@yichi tmp]$ wget?http://google-gflags.googlecode.com/files/gflags-1.5.tar.gz [yichi@yichi tmp]$ tar zxvf gflags-1.5.tar.gz [yichi@yichi tmp]$ cd gflags [yichi@yichi gflags-1.5]$ ./configure –prefix=$HOME/google-library [yichi@yichi gflags-1.5]$ make j=4 & make install 使用gflags 示例代碼下載地址:http://www.faithbee.com/wp-content/uploads/2011/05/gflags-sample.tar.bz2 main.cc // Copyright (c) 2011, D-Media Communication Technology Inc.// All rights reserved.////// ---// Author: Yichi Zhang <zyichi@gmail.com>//// File content description here#include "server.h"#include <google/gflags.h>#include <string>#include <stdio.h>DEFINE_bool(memory_pool, false, "If use memory pool"); DEFINE_bool(daemon, true, "If started as daemon"); DEFINE_string(module_id, "", "Server module id");DEFINE_int32(http_port, 80, "HTTP listen port"); DEFINE_int32(https_port, 443, "HTTPS listen port");int main(int argc, char** argv) {::google::ParseCommandLineFlags(&argc, &argv, true);// XXX NOTE: Should add 'FLAGS_' prefix.printf("Server module id: %s\n", FLAGS_module_id.c_str());if (FLAGS_daemon) {printf("Run as daemon: %d\n", FLAGS_daemon);}if (FLAGS_memory_pool) {printf("Use memory pool: %d\n", FLAGS_daemon);}Server server;return 0; }
server.h
// Copyright (c) 2011, D-Media Communication Technology Inc. // All rights reserved. // // // --- // Author: Yichi Zhang <zyichi@gmail.com> // // File content description here#include <google/gflags.h>#include <stdio.h>// Declare, defined in 'main.cc'. DECLARE_int32(http_port); DECLARE_int32(https_port);class Server {public:Server() {// XXX NOTE: Should add 'FLAGS_' prefix.printf("HTTP listen port: %d\n", FLAGS_http_port);printf("HTTPS listen port: %d\n", FLAGS_https_port);}virtual ~Server() {}private:; };編譯示例程序 [yichi@yichi gflags-sample]$ g++ -o gflags-sample main.cc -I $HOME/google-library/include -L $HOME/google-library/lib -lgflags 運行示例程序 帶參數運行 [yichi@yichi gflags-sample]$ LD_LIBRARY_PATH=$HOME/google-library/lib:$LD_LIBRARY_PATH ./gflags-sample Server module id: Run as daemon: 1 HTTP listen port: 80 HTTPS listen port: 443 帶參數運行,使用等號賦值 [yichi@yichi gflags-sample]$ LD_LIBRARY_PATH=$HOME/google-library/lib:$LD_LIBRARY_PATH ./gflags-sample -module_id="server_007" -daemon=true -http_port=8080 -https_port=4443 Server module id: server_007 Run as daemon: 1 HTTP listen port: 8080 HTTPS listen port: 4443 帶參數運行,使用空格分割參數和值 [yichi@yichi gflags-sample]$ LD_LIBRARY_PATH=$HOME/google-library/lib:$LD_LIBRARY_PATH ./gflags-sample -module_id "server_007" -daemon true -http_port 8080 -https_port 4443 Server module id: server_007 Run as daemon: 1 HTTP listen port: 8080 HTTPS listen port: 4443 顯示幫助 [yichi@yichi gflags-sample]$ LD_LIBRARY_PATH=$HOME/google-library/lib:$LD_LIBRARY_PATH ./gflags-sample –help gflags-sample: Warning: SetUsageMessage() never called Flags from main.cc: -daemon (If started as daemon) type: bool default: true -http_port (HTTP listen port) type: int32 default: 80 -https_port (HTTPS listen port) type: int32 default: 443 -memory_pool (If use memory pool) type: bool default: false -module_id (Server module id) type: string default: "" 參考資料 Google gflags官方文檔:http://google-gflags.googlecode.com/svn/trunk/doc/gflags.html from:http://www.faithbee.com/?p=415
總結
以上是生活随笔為你收集整理的使用 Google gflags 简化命令行参数处理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mysql-proxy 2进制版本安装
- 下一篇: 大四网管的面经