소스 검색

BUG: Fixed generation of cmake re-run rules.

Brad King 19 년 전
부모
커밋
1b5e3f4136

+ 11 - 10
Source/cmLocalVisualStudio6Generator.cxx

@@ -85,6 +85,15 @@ void cmLocalVisualStudio6Generator::OutputDSPFile()
   for(cmTargets::iterator l = tgts.begin(); 
       l != tgts.end(); l++)
     {
+    // Add a rule to regenerate the build system when the target
+    // specification source changes.
+    const char* suppRegenRule =
+      m_Makefile->GetDefinition("CMAKE_SUPPRESS_REGENERATION");
+    if (!cmSystemTools::IsOn(suppRegenRule))
+      {
+      this->AddDSPBuildRule(l->second);
+      }
+
     // INCLUDE_EXTERNAL_MSPROJECT command only affects the workspace
     // so don't build a projectfile for it
     if ((l->second.GetType() != cmTarget::INSTALL_FILES)
@@ -210,9 +219,9 @@ void cmLocalVisualStudio6Generator::CreateSingleDSP(const char *lname, cmTarget
 }
 
 
-void cmLocalVisualStudio6Generator::AddDSPBuildRule()
+void cmLocalVisualStudio6Generator::AddDSPBuildRule(cmTarget& tgt)
 {
-  std::string dspname = *(m_CreatedProjectNames.end()-1);
+  std::string dspname = tgt.GetName();
   dspname += ".dsp.cmake";
   const char* dsprule = m_Makefile->GetRequiredDefinition("CMAKE_COMMAND");
   cmCustomCommandLine commandLine;
@@ -262,14 +271,6 @@ void cmLocalVisualStudio6Generator::WriteDSPFile(std::ostream& fout,
                                                  const char *libName,
                                                  cmTarget &target)
 {
-  // if we should add regen rule then...
-  const char *suppRegenRule = 
-    m_Makefile->GetDefinition("CMAKE_SUPPRESS_REGENERATION");
-  if (!cmSystemTools::IsOn(suppRegenRule))
-    {
-    this->AddDSPBuildRule();
-    }
-
   // For utility targets need custom command since pre- and post-
   // build does not do anything in Visual Studio 6.  In order for the
   // rules to run in the correct order as custom commands, we need

+ 1 - 1
Source/cmLocalVisualStudio6Generator.h

@@ -79,7 +79,7 @@ private:
                       cmTarget &tgt, std::vector<cmSourceGroup> &sgs);
 
   void WriteDSPFooter(std::ostream& fout);
-  void AddDSPBuildRule();
+  void AddDSPBuildRule(cmTarget& tgt);
   void WriteCustomRule(std::ostream& fout,
                        const char* source,
                        const char* command,

+ 12 - 11
Source/cmLocalVisualStudio7Generator.cxx

@@ -101,6 +101,16 @@ void cmLocalVisualStudio7Generator::OutputVCProjFile()
   for(cmTargets::iterator l = tgts.begin(); 
       l != tgts.end(); l++)
     {
+    // Add a rule to regenerate the build system when the target
+    // specification source changes.
+    const char* suppRegenRule =
+      m_Makefile->GetDefinition("CMAKE_SUPPRESS_REGENERATION");
+    if (!cmSystemTools::IsOn(suppRegenRule) &&
+        (strcmp(l->first.c_str(), CMAKE_CHECK_BUILD_SYSTEM_TARGET) != 0))
+      {
+      this->AddVCProjBuildRule(l->second);
+      }
+
     // INCLUDE_EXTERNAL_MSPROJECT command only affects the workspace
     // so don't build a projectfile for it
     if ((l->second.GetType() != cmTarget::INSTALL_FILES)
@@ -213,9 +223,9 @@ void cmLocalVisualStudio7Generator::CreateSingleVCProj(const char *lname, cmTarg
 }
 
 
-void cmLocalVisualStudio7Generator::AddVCProjBuildRule()
+void cmLocalVisualStudio7Generator::AddVCProjBuildRule(cmTarget& tgt)
 {
-  std::string dspname = *(m_CreatedProjectNames.end()-1);
+  std::string dspname = tgt.GetName();
   dspname += ".vcproj.cmake";
   const char* dsprule = m_Makefile->GetRequiredDefinition("CMAKE_COMMAND");
   cmCustomCommandLine commandLine;
@@ -970,15 +980,6 @@ void cmLocalVisualStudio7Generator::WriteVCProjFile(std::ostream& fout,
     static_cast<cmGlobalVisualStudio7Generator *>
     (m_GlobalGenerator)->GetConfigurations();
   
-  // if we should add regen rule then...
-  const char *suppRegenRule = 
-    m_Makefile->GetDefinition("CMAKE_SUPPRESS_REGENERATION");
-  if (!cmSystemTools::IsOn(suppRegenRule) &&
-      (strcmp(libName, CMAKE_CHECK_BUILD_SYSTEM_TARGET) != 0))
-    {
-    this->AddVCProjBuildRule();
-    }
-
   // trace the visual studio dependencies
   std::string name = libName;
   name += ".vcproj.cmake";

+ 1 - 1
Source/cmLocalVisualStudio7Generator.h

@@ -76,7 +76,7 @@ private:
   void CreateSingleVCProj(const char *lname, cmTarget &tgt);
   void WriteVCProjFile(std::ostream& fout, const char *libName, 
                        cmTarget &tgt);
-  void AddVCProjBuildRule();
+  void AddVCProjBuildRule(cmTarget& tgt);
   void WriteConfigurations(std::ostream& fout,
                            const char *libName, cmTarget &tgt);
   void WriteConfiguration(std::ostream& fout,