瀏覽代碼

Do not set CMAKE_MATCH_ variables when not neeeded

Each call to AddDefinition has overhead for variable watches and such.
Avoid extra calls when not needed.

This decreases the configure time for ParaView by 10 seconds on my
machine.  Without the change about 1,000,000 set-to-empty calls were
being made.  After the change it drops to about 100,000.
Bill Hoffman 12 年之前
父節點
當前提交
dc03499595
共有 1 個文件被更改,包括 14 次插入6 次删除
  1. 14 6
      Source/cmStringCommand.cxx

+ 14 - 6
Source/cmStringCommand.cxx

@@ -534,8 +534,12 @@ void cmStringCommand::ClearMatches(cmMakefile* mf)
     {
     char name[128];
     sprintf(name, "CMAKE_MATCH_%d", i);
-    mf->AddDefinition(name, "");
-    mf->MarkVariableAsUsed(name);
+    const char* s = mf->GetDefinition(name);
+    if(s && *s != 0)
+      {
+      mf->AddDefinition(name, "");
+      mf->MarkVariableAsUsed(name);
+      }
     }
 }
 
@@ -544,10 +548,14 @@ void cmStringCommand::StoreMatches(cmMakefile* mf,cmsys::RegularExpression& re)
 {
   for (unsigned int i=0; i<10; i++)
     {
-    char name[128];
-    sprintf(name, "CMAKE_MATCH_%d", i);
-    mf->AddDefinition(name, re.match(i).c_str());
-    mf->MarkVariableAsUsed(name);
+    std::string m = re.match(i);
+    if(m.size() > 0)
+      {
+      char name[128];
+      sprintf(name, "CMAKE_MATCH_%d", i);
+      mf->AddDefinition(name, re.match(i).c_str());
+      mf->MarkVariableAsUsed(name);
+      }
     }
 }