浏览代码

ENH: Add per-language clean rule generation to cmake_clean.cmake files to include cmake_clean_<lang>.cmake files generated by dependency scanning. Add Fortran module file and timestamp cleaning rules.

Brad King 18 年之前
父节点
当前提交
81f6e86f12
共有 2 个文件被更改,包括 41 次插入0 次删除
  1. 21 0
      Source/cmDependsFortran.cxx
  2. 20 0
      Source/cmLocalUnixMakefileGenerator3.cxx

+ 21 - 0
Source/cmDependsFortran.cxx

@@ -219,6 +219,27 @@ bool cmDependsFortran::Finalize(std::ostream& makeDepends,
     {
     fiStream << " " << *i << "\n";
     }
+
+  // Create a script to clean the modules.
+  if(!provides.empty())
+    {
+    std::string fcName = this->TargetDirectory;
+    fcName += "/cmake_clean_Fortran.cmake";
+    cmGeneratedFileStream fcStream(fcName.c_str());
+    fcStream << "# Remove fortran modules provided by this target.\n";
+    fcStream << "FILE(REMOVE\n";
+    for(std::set<cmStdString>::const_iterator i = provides.begin();
+        i != provides.end(); ++i)
+      {
+      std::string mod_upper = cmSystemTools::UpperCase(*i);
+      std::string mod_lower = *i;
+      fcStream << " \"" << mod_lower << ".mod\""
+               << " \"" << mod_lower << ".mod.stamp\""
+               << " \"" << mod_upper << ".mod\""
+               << " \"" << mod_upper << ".mod.stamp\"\n";
+      }
+    fcStream << "  )\n";
+    }
   return true;
 }
 

+ 20 - 0
Source/cmLocalUnixMakefileGenerator3.cxx

@@ -1048,6 +1048,26 @@ cmLocalUnixMakefileGenerator3
       }
     fout << ")\n";
     commands.push_back(remove);
+
+    // For the main clean rule add per-language cleaning.
+    if(!filename)
+      {
+      // Get the set of source languages in the target.
+      std::set<cmStdString> languages;
+      target.GetLanguages(languages);
+      fout << "\n"
+           << "# Per-language clean rules from dependency scanning.\n"
+           << "FOREACH(lang";
+      for(std::set<cmStdString>::const_iterator l = languages.begin();
+          l != languages.end(); ++l)
+        {
+        fout << " " << *l;
+        }
+      fout << ")\n"
+           << "  INCLUDE(" << this->GetTargetDirectory(target)
+           << "/cmake_clean_${lang}.cmake OPTIONAL)\n"
+           << "ENDFOREACH(lang)\n";
+      }
     }
 }