浏览代码

Merge topic 'make-entry-no-parallel'

bd11de0 Makefile: Allow "gmake target1 target2 -j" (#14312)
Brad King 12 年之前
父节点
当前提交
7974dced73

+ 2 - 0
Source/cmGlobalBorlandMakefileGenerator.h

@@ -44,6 +44,8 @@ public:
    */
   virtual void EnableLanguage(std::vector<std::string>const& languages,
                               cmMakefile *, bool optional);
+
+  virtual bool AllowNotParallel() const { return false; }
 };
 
 #endif

+ 3 - 0
Source/cmGlobalUnixMakefileGenerator3.h

@@ -125,6 +125,9 @@ public:
                             const std::string &workingDirectory,
                             const std::string &compileCommand);
 
+  /** Does the make tool tolerate .NOTPARALLEL? */
+  virtual bool AllowNotParallel() const { return true; }
+
 protected:
   void WriteMainMakefile2();
   void WriteMainCMakefile();

+ 2 - 0
Source/cmGlobalWatcomWMakeGenerator.h

@@ -43,6 +43,8 @@ public:
    */
   virtual void EnableLanguage(std::vector<std::string>const& languages,
                               cmMakefile *, bool optional);
+
+  virtual bool AllowNotParallel() const { return false; }
 };
 
 #endif

+ 11 - 0
Source/cmLocalUnixMakefileGenerator3.cxx

@@ -1685,6 +1685,17 @@ void cmLocalUnixMakefileGenerator3
                       "default_target",
                       depends,
                       no_commands, true);
+
+  // Help out users that try "gmake target1 target2 -j".
+  cmGlobalUnixMakefileGenerator3* gg =
+    static_cast<cmGlobalUnixMakefileGenerator3*>(this->GlobalGenerator);
+  if(gg->AllowNotParallel())
+    {
+    std::vector<std::string> no_depends;
+    this->WriteMakeRule(ruleFileStream,
+      "Allow only one \"make -f Makefile2\" at a time, but pass parallelism.",
+      ".NOTPARALLEL", no_depends, no_commands, true);
+    }
   }
 
   this->WriteSpecialTargetsTop(ruleFileStream);