zoukankan      html  css  js  c++  java
  • 使用 Google gflags 简化命令行参数处理

    (本文章仅适用于C++程序)
    写服务程序时,如果需要提供命令行参数。传统的方法是手工解析argv参数,或者使用getopt函数。两种方法都比较费劲。使用Google gflags可以大大简化命令行参数处理。
    安装gflag
    从官方地址http://code.google.com/p/google-gflags/下载gflags并安装。比如我下载的是1.5版本。
    [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
    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: ""
    参考资料
     
  • 相关阅读:
    揭秘富人的22种习惯与风格
    CSS
    浏览器--编辑器
    3 位运算 , 补码 ----在开发中比较少用
    2 Java数据类型+转义字符
    1 概述
    如何使用大脑
    JDBC
    web.xml文件的作用
    WindowBuilder插件探索
  • 原文地址:https://www.cnblogs.com/dkblog/p/2352315.html
Copyright © 2011-2022 走看看