Procházet zdrojové kódy

cmCommandLineArgument supports ZeroOrOne arguments

This allows us to parse command line arguments such as `-j` || `-j2`
Robert Maynard před 4 roky
rodič
revize
b34db1db69
1 změnil soubory, kde provedl 10 přidání a 2 odebrání
  1. 10 2
      Source/cmCommandLineArgument.h

+ 10 - 2
Source/cmCommandLineArgument.h

@@ -13,6 +13,7 @@ struct cmCommandLineArgument
     Zero,
     One,
     Two,
+    ZeroOrOne,
   };
 
   std::string InvalidSyntaxMessage;
@@ -72,11 +73,18 @@ struct cmCommandLineArgument
         parseState = ParseMode::SyntaxError;
       }
 
-    } else if (this->Type == Values::One) {
+    } else if (this->Type == Values::One || this->Type == Values::ZeroOrOne) {
       if (input.size() == this->Name.size()) {
         ++index;
         if (index >= allArgs.size() || allArgs[index][0] == '-') {
-          parseState = ParseMode::ValueError;
+          if (this->Type == Values::ZeroOrOne) {
+            parseState =
+              this->StoreCall(std::string{}, std::forward<CallState>(state)...)
+              ? ParseMode::Valid
+              : ParseMode::Invalid;
+          } else {
+            parseState = ParseMode::ValueError;
+          }
         } else {
           parseState =
             this->StoreCall(allArgs[index], std::forward<CallState>(state)...)