Просмотр исходного кода

cmGlobalGenerator: Add method to compute "cmake --build" command line

Create a GenerateCMakeBuildCommand method to generate a command-line
string invoking "cmake --build" for a given target and configuration.
Optionally allow the "-i" make flag and additional native options.
Brad King 12 лет назад
Родитель
Сommit
05923172f9

+ 40 - 0
Source/cmGlobalGenerator.cxx

@@ -1707,6 +1707,46 @@ int cmGlobalGenerator::Build(
   return retVal;
 }
 
+//----------------------------------------------------------------------------
+std::string cmGlobalGenerator::GenerateCMakeBuildCommand(
+  const char* target, const char* config, const char* native,
+  bool ignoreErrors)
+{
+  std::string makeCommand = cmSystemTools::GetCMakeCommand();
+  makeCommand = cmSystemTools::ConvertToOutputPath(makeCommand.c_str());
+  makeCommand += " --build .";
+  if(config && *config)
+    {
+    makeCommand += " --config \"";
+    makeCommand += config;
+    makeCommand += "\"";
+    }
+  if(target && *target)
+    {
+    makeCommand += " --target \"";
+    makeCommand += target;
+    makeCommand += "\"";
+    }
+  const char* sep = " -- ";
+  if(ignoreErrors)
+    {
+    const char* iflag = this->GetBuildIgnoreErrorsFlag();
+    if(iflag && *iflag)
+      {
+      makeCommand += sep;
+      makeCommand += iflag;
+      sep = " ";
+      }
+    }
+  if(native && *native)
+    {
+    makeCommand += sep;
+    makeCommand += native;
+    }
+  return makeCommand;
+}
+
+//----------------------------------------------------------------------------
 void cmGlobalGenerator::AddLocalGenerator(cmLocalGenerator *lg)
 {
   this->LocalGenerators.push_back(lg);

+ 7 - 0
Source/cmGlobalGenerator.h

@@ -134,6 +134,11 @@ public:
     const char *targetName, const char* config,
     bool ignoreErrors, bool fast);
 
+  /** Generate a "cmake --build" call for a given target and config.  */
+  std::string GenerateCMakeBuildCommand(const char* target,
+                                        const char* config,
+                                        const char* native,
+                                        bool ignoreErrors);
 
   ///! Set the CMake instance
   void SetCMakeInstance(cmake *cm);
@@ -422,6 +427,8 @@ private:
 
   void ClearGeneratorMembers();
 
+  virtual const char* GetBuildIgnoreErrorsFlag() const { return 0; }
+
   // Cache directory content and target files to be built.
   struct DirectoryContent: public std::set<cmStdString>
   {

+ 1 - 0
Source/cmGlobalUnixMakefileGenerator3.h

@@ -188,6 +188,7 @@ protected:
 
   cmGeneratedFileStream *CommandDatabase;
 private:
+  virtual const char* GetBuildIgnoreErrorsFlag() const { return "-i"; }
   virtual std::string GetEditCacheCommand() const;
   virtual void ComputeTargetObjects(cmGeneratorTarget* gt) const;
 };