Forum Programmation.c++ lib pour parser les options (command-line & config-file)

Posté par . Licence CC by-sa
Tags : aucun
2
15
nov.
2015

Bonjour.

Je cherche une lib qui soit capable de parser les options fournies soit par une ligne de commande, soit par des fichiers de config.
Je sais que boost::program_options existe, mais… me retrouver avec un binaire final dont la taille est multipliée par 4 (de 58k à 212k pour être exact, en mode release…) juste pour l'avoir utilisé me gêne "quelques peu".

Quelqu'un à une idée?

  • # getopt/getopts

    Posté par . Évalué à 4.

    il me semble que c'est getopt/getopts qui gere ca.

    • [^] # Re: getopt/getopts

      Posté par . Évalué à 1. Dernière modification le 15/11/15 à 14:45.

      Merci de la suggestion (je n'avais pas pensé à getopt), par contre si je ne me trompe pas (je ne m'en suis jamais servi), getopt ne sert que pour la ligne de commande, non?
      Bon, on peut constituer une ligne de commande à partir d'un fichier de conf, mais ça fait un peu "hacky" si tu vois ce que je veux dire…
      Et j'admets que j'apprécie pas mal le fait que boost::program_options puisse prendre aussi bien un fichier que la ligne de commande comme source.

      À voir… J'ai un peu fouillé de mon côté, rien trouvé de probant, je pense que je vais faire la mienne à ce train la.

      • [^] # Re: getopt/getopts

        Posté par (page perso) . Évalué à 2.

        Utilise les namelist du Fortran, c'est compatible fichier et ligne de commande ;-)

        http://stackoverflow.com/questions/17581416/c-equivalent-to-fortran-namelist

        • [^] # Re: getopt/getopts

          Posté par . Évalué à 2.

          J'avoue ne pas être très chaud à l'idée d'incorporer un langage supplémentaire juste pour ça… surtout un langage que je ne maîtrise pas :)

          Je suis parti pour implémenter ma propre lib du coup.
          Ça va être l'affaire de 2 classes, 3 templates, 5-6 fonctions et on verra bien le résultat…

          • [^] # Ça peut peut-être aider...

            Posté par (page perso) . Évalué à 1.

            J'ai implémenté un tel système dans mon framework ; j'en ai parlé dans ce journal.
            Le système a un peu évolué depuis ; la courte description sur cette page est plus à jour.
            L'implémentation en question n'est pas disponible en tant que bibliothèque dédiée, mais les sources étant accessibles, ça peut peut-être quand même être utile…

            Freelance en ingénierie informatique.

            • [^] # Re: Ça peut peut-être aider...

              Posté par . Évalué à 2.

              Merci, mais du coup j'ai fini le coeur du système hier. Je voulais consolider le code ce matin et le publier, mais manque de bol mon Xorg à décidé de ne plus répondre et de ne rien logguer… donc suis en mode dépannage pour le moment >.<

      • [^] # Re: getopt/getopts

        Posté par . Évalué à 2.

        en meme temps chez toi, tu dois avoir à gerer 5 sources, reparties en 3 cas (potentiellement 3 librairies) :

        • les fichiers de config (/usr/share, /etc, le home utilisateur)
        • l'environnement,
        • les parametres CLI

        et c'est generalement dans cet ordre que les bons logiciels gerent leurs parametres.

        du coup tu peux utiliser une bibliotheque specialisé gestion de fichier pour les 3 premiers cas.
        enchainer avec une bibliotheque pour lire l'environnement
        et enfin utiliser getopts pour parser la ligne de commande

  • # J'ai écrit cette bibliothèque… pour OCaml

    Posté par (page perso) . Évalué à 2.

    J'ai écrit Gasoline une bibliothèque pour OCaml qui fait exactement ça, peut-être que tu pourrais t'en inspirer si tu veux écrire ta propre bibliothèque.

    Je définis un type pour les “sources de paramètres” comme la ligne de commande, l'environnement ou des fichiers de configuration. Ensuite le driver de la fonction principale du programme se charge d'analyser toutes ces sources et de les hiérarchiser pour déterminer les paramètres du programme. Du côté application on définit simplement des variables fontionnelles qui sont ensuite examinées par la procédure principale.

Suivre le flux des commentaires

Note : les commentaires appartiennent à ceux qui les ont postés. Nous n'en sommes pas responsables.