瀏覽代碼

ENH: add special windows CMAKE_MSVCIDE_RUN_PATH variable for adding to the path of vs IDE for running custom commands from cmake

Bill Hoffman 19 年之前
父節點
當前提交
0005d625a0
共有 2 個文件被更改,包括 24 次插入1 次删除
  1. 16 0
      Source/cmGlobalVisualStudio7Generator.cxx
  2. 8 1
      Source/cmLocalGenerator.cxx

+ 16 - 0
Source/cmGlobalVisualStudio7Generator.cxx

@@ -40,6 +40,22 @@ void cmGlobalVisualStudio7Generator::EnableLanguage(std::vector<std::string>cons
   // Create list of configurations requested by user's cache, if any.
   this->cmGlobalGenerator::EnableLanguage(lang, mf);
   this->GenerateConfigurations(mf);
+  
+  // if this environment variable is set, then copy it to
+  // a static cache entry.  It will be used by 
+  // cmLocalGenerator::ConstructScript, to add an extra PATH
+  // to all custom commands.   This is because the VS IDE
+  // does not use the environment it is run in, and this allows
+  // for running commands and using dll's that the IDE environment
+  // does not know about.
+  const char* extraPath = cmSystemTools::GetEnv("CMAKE_MSVCIDE_RUN_PATH");
+  if(extraPath)
+    {
+    mf->AddCacheDefinition("CMAKE_MSVCIDE_RUN_PATH",
+                           extraPath, "Saved environment variable CMAKE_MSVCIDE_RUN_PATH",
+                           cmCacheManager::STATIC);
+    }
+
 }
 
 std::string cmGlobalVisualStudio7Generator::GenerateBuildCommand(const char* makeProgram,

+ 8 - 1
Source/cmLocalGenerator.cxx

@@ -1726,7 +1726,14 @@ cmLocalGenerator::ConstructScript(const cmCustomCommandLines& commandLines,
     script += this->Convert(workingDirectory, START_OUTPUT, SHELL);
     script += newline;
     }
-
+  const char* extraPath = this->Makefile->GetDefinition("CMAKE_MSVCIDE_RUN_PATH");
+  if(extraPath)
+    {
+    script += "set PATH=";
+    script += extraPath;
+    script += ";%PATH%";
+    script += newline;
+    }
   // Write each command on a single line.
   for(cmCustomCommandLines::const_iterator cl = commandLines.begin();
       cl != commandLines.end(); ++cl)