diff -uwr cmake-3.0.1.orig//Source/CMakeVersionCompute.cmake cmake-3.0.1.new//Source/CMakeVersionCompute.cmake
--- cmake-3.0.1.orig//Source/CMakeVersionCompute.cmake	2014-08-01 00:09:04 +0900
+++ cmake-3.0.1.new//Source/CMakeVersionCompute.cmake	2014-09-06 23:05:32 +0900
@@ -2,13 +2,14 @@
 include(${CMake_SOURCE_DIR}/Source/CMakeVersion.cmake)
 
 # Releases define a small patch level.
-if("${CMake_VERSION_PATCH}" VERSION_LESS 20000000)
-  set(CMake_VERSION_IS_RELEASE 1)
-  set(CMake_VERSION_SOURCE "")
-else()
-  set(CMake_VERSION_IS_RELEASE 0)
-  include(${CMake_SOURCE_DIR}/Source/CMakeVersionSource.cmake)
-endif()
+#if("${CMake_VERSION_PATCH}" VERSION_LESS 20000000)
+#  set(CMake_VERSION_IS_RELEASE 1)
+#  set(CMake_VERSION_SOURCE "")
+#else()
+#  set(CMake_VERSION_IS_RELEASE 0)
+#  include(${CMake_SOURCE_DIR}/Source/CMakeVersionSource.cmake)
+#endif()
+set(CMake_VERSION_SOURCE pdb_mod)
 
 # Compute the full version string.
 set(CMake_VERSION ${CMake_VERSION_MAJOR}.${CMake_VERSION_MINOR}.${CMake_VERSION_PATCH})
diff -uwr cmake-3.0.1.orig//Source/cmTarget.cxx cmake-3.0.1.new//Source/cmTarget.cxx
--- cmake-3.0.1.orig//Source/cmTarget.cxx	2014-08-01 00:09:09 +0900
+++ cmake-3.0.1.new//Source/cmTarget.cxx	2014-09-06 23:06:15 +0900
@@ -3149,7 +3149,7 @@
 }
 
 //----------------------------------------------------------------------------
-std::string cmTarget::GetPDBName(const char* config) const
+std::string cmTarget::GetPDBName(const char* config, PDBType pdbType) const
 {
   std::string prefix;
   std::string base;
@@ -3157,6 +3157,18 @@
   this->GetFullNameInternal(config, false, prefix, base, suffix);
 
   std::vector<std::string> props;
+  switch (pdbType)
+  {
+  case PT_DEFAULT:
+	  break;
+  case PT_LINKER:
+	  props.push_back("LINKER_PDB_NAME");
+	  break;
+  case PT_COMPILER:
+	  props.push_back("COMPILER_PDB_NAME");
+	  break;
+  }//switch
+
   std::string configUpper =
     cmSystemTools::UpperCase(config? config : "");
   if(!configUpper.empty())
diff -uwr cmake-3.0.1.orig//Source/cmTarget.h cmake-3.0.1.new//Source/cmTarget.h
--- cmake-3.0.1.orig//Source/cmTarget.h	2014-08-01 00:09:09 +0900
+++ cmake-3.0.1.new//Source/cmTarget.h	2014-09-06 23:06:15 +0900
@@ -67,6 +67,8 @@
   cmTargetInternals* Pointer;
 };
 
+enum PDBType { PT_DEFAULT, PT_LINKER, PT_COMPILER };
+
 /** \class cmTarget
  * \brief Represent a library or executable target loaded from a makefile.
  *
@@ -378,7 +380,7 @@
                              const char* config=0, bool implib = false) const;
 
   /** Get the name of the pdb file for the target.  */
-  std::string GetPDBName(const char* config=0) const;
+  std::string GetPDBName(const char* config = 0, PDBType pdbType = PT_DEFAULT) const;
 
   /** Whether this library has soname enabled and platform supports it.  */
   bool HasSOName(const char* config) const;
diff -uwr cmake-3.0.1.orig//Source/cmVisualStudio10TargetGenerator.cxx cmake-3.0.1.new//Source/cmVisualStudio10TargetGenerator.cxx
--- cmake-3.0.1.orig//Source/cmVisualStudio10TargetGenerator.cxx	2014-08-01 00:09:09 +0900
+++ cmake-3.0.1.new//Source/cmVisualStudio10TargetGenerator.cxx	2014-09-06 23:02:16 +0900
@@ -1402,6 +1402,28 @@
     }
 
   this->ClOptions[configName] = pOptions.release();
+
+  auto genPDB = this->Target->GetProperty("GENERATE_COMPILER_PDB");
+  if ( genPDB )
+  {
+	  if ( cmSystemTools::IsOn(genPDB) )
+	  {
+		  std::string programDataBaseFileName 
+			  = this->Target->GetPDBDirectory(configName.c_str()) 
+			  + "/" + this->Target->GetPDBName(configName.c_str(), PT_COMPILER);
+		  clOptions.AddFlag("ProgramDataBaseFileName", programDataBaseFileName.c_str());
+
+		  if ( !clOptions.GetFlag("DebugInformationFormat") )
+		  {
+			  clOptions.AddFlag("DebugInformationFormat", "ProgramDatabase");
+		  }
+	  }
+	  else
+	  {
+		  clOptions.AddFlag("ProgramDataBaseFileName", "\n");
+	  }
+  }
+
   return true;
 }
 
@@ -1656,6 +1678,8 @@
                                   config.c_str());
     }
 
+  targetNamePDB = this->Target->GetPDBName(config.c_str(), PT_LINKER);
+
   std::string pdb = this->Target->GetPDBDirectory(config.c_str());
   pdb += "/";
   pdb += targetNamePDB;
@@ -1672,6 +1696,13 @@
                         this->GeneratorTarget->ModuleDefinitionFile.c_str());
     }
 
+
+  auto genPDB = this->Target->GetProperty("GENERATE_LINKER_PDB");
+  if ( genPDB )
+  {
+	  linkOptions.AddFlag("GenerateDebugInformation", cmSystemTools::IsOn(genPDB) ? "true" : "false");
+  }
+
   this->LinkOptions[config] = pOptions.release();
   return true;
 }
