diff -Naur ..\..\cmake-2.8.7.original\Source\cmAddSubDirectoryCommand.cxx .\cmAddSubDirectoryCommand.cxx
--- ..\..\cmake-2.8.7.original\Source\cmAddSubDirectoryCommand.cxx	Fri Dec 30 12:17:16 2011
+++ .\cmAddSubDirectoryCommand.cxx	Thu Apr 19 10:02:22 2012
@@ -26,6 +26,7 @@
   std::string binArg;
   
   bool excludeFromAll = false;
+  bool inheritFromParent = true;
 
   // process the rest of the arguments looking for optional args
   std::vector<std::string>::const_iterator i = args.begin();
@@ -37,6 +38,11 @@
       excludeFromAll = true;
       continue;
       }
+    else if( *i == "NOINHERIT" )
+    {
+        inheritFromParent = false;
+        continue;
+    }
     else if (!binArg.size())
       {
       binArg = *i;
@@ -117,7 +123,7 @@
 
   // Add the subdirectory using the computed full paths.
   this->Makefile->AddSubDirectory(srcPath.c_str(), binPath.c_str(),
-                                  excludeFromAll, false, true);
+                                  excludeFromAll, false, true, inheritFromParent);
 
   return true;
 }
diff -Naur ..\..\cmake-2.8.7.original\Source\cmMakefile.cxx .\cmMakefile.cxx
--- ..\..\cmake-2.8.7.original\Source\cmMakefile.cxx	Fri Dec 30 12:17:18 2011
+++ .\cmMakefile.cxx	Thu Apr 19 10:56:41 2012
@@ -49,7 +49,7 @@
 };
 
 // default is not to be building executables
-cmMakefile::cmMakefile(): Internal(new Internals)
+cmMakefile::cmMakefile(): Internal(new Internals), m_NoInheritanceFromParent(false)
 {
   const cmDefinitions& defs = cmDefinitions();
   const std::set<cmStdString> globalKeys = defs.LocalKeys();
@@ -1478,9 +1478,14 @@
   this->Internal->VarStack.top() = parent->Internal->VarStack.top().Closure();
 
   // copy include paths
-  this->IncludeDirectories = parent->IncludeDirectories;
   this->SystemIncludeDirectories = parent->SystemIncludeDirectories;
 
+  // We dont want to inherit parrent settings so bailing out
+  if( false == GetInheritanceFromParent() )
+      return;
+
+  this->IncludeDirectories = parent->IncludeDirectories;
+
   // define flags
   this->DefineFlags = parent->DefineFlags;
   this->DefineFlagsOrig = parent->DefineFlagsOrig;
@@ -1574,7 +1579,7 @@
 
 void cmMakefile::AddSubDirectory(const char* srcPath, const char *binPath,
                                  bool excludeFromAll, bool preorder,
-                                 bool immediate)
+                                 bool immediate, bool inheritFromParent /* = true */)
 {
   // Make sure the binary directory is unique.
   if(!this->EnforceUniqueDir(srcPath, binPath))
@@ -1587,6 +1592,8 @@
     this->LocalGenerator->GetGlobalGenerator()->CreateLocalGenerator();
   lg2->SetParent(this->LocalGenerator);
   this->LocalGenerator->GetGlobalGenerator()->AddLocalGenerator(lg2);
+
+  lg2->GetMakefile()->SetInheritanceFromParent( inheritFromParent );
 
   // set the subdirs start dirs
   lg2->GetMakefile()->SetStartDirectory(srcPath);
diff -Naur ..\..\cmake-2.8.7.original\Source\cmMakefile.h .\cmMakefile.h
--- ..\..\cmake-2.8.7.original\Source\cmMakefile.h	Fri Dec 30 12:17:18 2011
+++ .\cmMakefile.h	Wed Apr 18 13:34:00 2012
@@ -270,7 +270,7 @@
                        bool preorder = false);
   void AddSubDirectory(const char* fullSrcDir,const char *fullBinDir,
                        bool excludeFromAll, bool preorder,
-                       bool immediate);
+                       bool immediate, bool inheritFromParent = true);
 
   /**
    * Configure a subdirectory
@@ -1002,6 +1002,12 @@
 
   // Enforce rules about CMakeLists.txt files.
   void EnforceDirectoryLevelRules();
+
+public:
+ inline bool GetInheritanceFromParent() const { return m_NoInheritanceFromParent; }
+ inline void SetInheritanceFromParent( bool inherit ){ m_NoInheritanceFromParent = inherit; }
+protected:
+  bool m_NoInheritanceFromParent;
 };
 
 //----------------------------------------------------------------------------