H
Hallo,
ich benutze TCLAP, um die Kommandozeilenargumente zu parsen.
Dabei ist der Syntax meines Programms in etwa folgendermaßen:
prog <operation> <file> <args>
operation
gibt die Art der Aktion an(z.b. auflisten, editieren etc)
Dazu muss eine Datei angegeben werden, allerdings nicht bei allen Aktionen.
Außerdem müssen für einige Aktionen zusätzliche Argumente angegeben werden.
Das alles sollen aber Argumente sein, keine Optionen (also ohne - bzw. --)
Optionen kommen noch dazu.
Das ganze löse ich momentan so:
CmdLine cmd("list", ' ', "1.0");
UnlabeledValueArg<std::string> op("operation","specifies the operation", true, "list", "operation");
cmd.add(op);
UnlabeledValueArg<std::string> name("list", "specifies the list", true, "", "list");
cmd.add(name);
UnlabeledMultiArg<std::string> args("args", "arguments for add, create and delete", false, "arguments");
cmd.add(args);
cmd.parse(argc, argv);
// ...
if(operation == "list")
// ...
if(operation == "create")
// usw.
Das funktioniert eigentlich ganz gut, das Problem hierbei ist aber, dass ich den Namen der Liste immer angeben muss. Macht man das nicht, gibts einen Parse-Error, obwohl der Syntax eigentlich richtig wäre.
Ich kann das Argument
name
leider nicht optional machen, da:
error: You can't specify ANY Unlabeled Arg following an optional Unlabeled Arg for arg error: You can't specify ANY Unlabeled Arg following an optional Unlabeled Arg for arg Argument: (--args)
Hat jemand eine Idee, wie ich das umgehen kann? Ich bin auch offen für andere Bibliotheken, diese wären mir auch lieber, als alles selbst zu schreiben.
Boost::program_options hatte ich mir angesehen, ich habs aber nicht ganz verstanden. Ich hatte das Gefühl, da wird es schwieriger, Argumente ohne - bzw. -- umzusetzen. Korrigiert mich, falls ich mich täusche.
Zusammendfassend: Was ist eine gute Möglichkeit, oben beschriebenes Programm mit Argumenten zu parsen?