Paramètres de ligne de commande gFlags-parsing faciles à utiliser de Google (prend en charge C ++ et Python)

1. Introduction

GFlags est un ensemble de bibliothèques open source pour le traitement des paramètres de ligne de commande open source par Google, y compris la version C ++ et la version python.
Contrairement aux bibliothèques telles que getopt (), les définitions d'indicateur peuvent être dispersées dans divers codes sources au lieu d'être rassemblées. Un fichier source peut définir certains de ses propres indicateurs, et les applications liées au fichier peuvent utiliser ces indicateurs. Cela facilite la réutilisation du code. Si différents fichiers définissent le même drapeau, une erreur sera signalée lors de la liaison.

Deux, définissez les drapeaux dans le programme

La définition d'un drapeau est simple: utilisez simplement la macro correspondante du type que vous souhaitez utiliser.
exemple:

// foo.cc
#include <gflags/glags.h>

DEFINE_bool(big_menu, true, "Include 'advanced' options in the menu listing");
DEFINE_string(languages, "english,french,german",
              "comma-separated list of languages to offer in the 'lang' menu");

Types pris en charge:

  • DEFINE_bool: booléen
  • DEFINE_int32: entier 32 bits
  • DEFINE_int64: entier 64 bits
  • DEFINE_uint64: entier 64 bits non signé
  • DEFINE_double: double
  • DEFINE_string: chaîne C ++ La
    macro DEFINE contient trois paramètres: le nom de l'indicateur, la valeur par défaut et l'aide décrivant la méthode. L'aide sera affichée lorsque l'indicateur --help est exécuté.
    Les indicateurs peuvent être définis dans n'importe quel fichier source, mais chacun ne peut être défini qu'une seule fois. Si vous devez l'utiliser à plusieurs endroits, DEFINEZ dans un fichier et DECLAREZ dans d'autres fichiers. Une meilleure façon est de DÉFINIR dans le fichier .cc et DECLARE dans le fichier .h, afin que vous puissiez utiliser l'indicateur si vous incluez le fichier d'en-tête.

Trois, utilisez le drapeau

L'indicateur peut être défini comme l'utilisation de variables comme normal, juste précédées FLAGS_du préfixe. Tel que défini dans les exemples précédents FLAGS_big_menuet FLAGS_languagesdeux variables. Peut être lu et écrit comme des variables générales:

if (FLAGS_consider_made_up_languages)
  FLAGS_languages += ",klingon";   // implied by --consider_made_up_languages
if (FLAGS_languages.find("finnish") != string::npos)
  HandleFinnish();

Quatre, initialisez tous les paramètres

Après avoir défini les paramètres, dites enfin à l'exécuteur de traiter les paramètres passés depuis la ligne de commande afin que les paramètres FLAG définis soient correctement affectés.
Généralement appelé dans une main()fonction

google::ParseCommandLineFlags(&argc, &argv, true);

argcEt argvest-ce que les mainparamètres d'entrée, parce que cette fonction changera leur valeur, sont passés au pointeur.
Le troisième paramètre est appelé remove_flags. Si c'est vrai , ParseCommandLineFlagsce sera de la argvsuppression et de leurs paramètres d'identification correspondant à la argcvaleur de réduction . Ensuite, argvseuls les paramètres de ligne de commande sont conservés.
Au contraire, s'il remove_flagsest faux , il ParseCommandLineFlagsrestera argcinchangé, mais leur ordre sera réajusté pour que le logo soit devant.
Remarque: Le ./foo --big_menu=false arg1 milieu big_menuest le logo, falseses paramètres et arg1les paramètres de ligne de commande.

 

Cinq signes spéciaux


--help	shows all flags from all files, sorted by file and then by name; shows the flagname, its default value, and its help string
--helpfull	same as -help, but unambiguously asks for all flags (in case -help changes in the future)
--helpshort	shows only flags for the file with the same name as the executable (usually the one containing main())
--helpxml	like --help, but output is in xml for easier parsing
--helpon=FILE  	shows only flags defined in FILE.*
--helpmatch=S	shows only flags defined in *S*.*
--helppackage	shows flags defined in files in same directory as main()
--version	prints version info for the executable

Six, exemple de code

 Vous devez d'abord télécharger le code gflags, puis construire et installer

main.cpp

#include <iostream>

#include <gflags/gflags.h>

DEFINE_string(data_path,"./config/","data path");
DEFINE_string(config_path,"./data/","config path");
DEFINE_bool(is_check,false,"check flag");

using namespace std;

int main(int argc,char *argv[])
{
    google::SetUsageMessage("usage:");
    google::ParseCommandLineFlags(&argc,&argv,true);

    cout<<"argc="<<argc<<endl;
    cout<<"data_path="<<FLAGS_data_path<<endl;
    cout<<"config_path="<<FLAGS_config_path<<endl;
    cout<<"is_check="<<FLAGS_is_check<<endl;

    return 0;
}

Commande de construction:

g++ -Wall -g main.cpp -o main -I/usr/local/include/gflags -lgflags -lpthread

résultat courant:

                

               

 

Informations plus détaillées:

1 、 github: https://github.com/gflags/gflags

2. Document officiel: https://gflags.github.io/gflags/

Je suppose que tu aimes

Origine blog.csdn.net/lianshaohua/article/details/108646664
conseillé
Classement