diff --git a/Modules/CMakeGenericSystem.cmake b/Modules/CMakeGenericSystem.cmake
index c8bc457730b5addaea9de188a215bcec67052e4f..970d777882e7c8e95ad7b625d148135e0e8424e2 100644
--- a/Modules/CMakeGenericSystem.cmake
+++ b/Modules/CMakeGenericSystem.cmake
@@ -4,6 +4,7 @@ SET(CMAKE_STATIC_LIBRARY_PREFIX "lib")
 SET(CMAKE_STATIC_LIBRARY_SUFFIX ".a")
 SET(CMAKE_SHARED_LIBRARY_PREFIX "lib")          # lib
 SET(CMAKE_SHARED_LIBRARY_SUFFIX ".so")          # .so
+SET(CMAKE_EXECUTABLE_SUFFIX "")          # .exe
 SET(CMAKE_DL_LIBS "-ldl")
 SET(CMAKE_SHARED_LIBRARY_C_FLAGS "")            # -pic 
 SET(CMAKE_SHARED_LIBRARY_CREATE_C_FLAGS "-shared")       # -shared
diff --git a/Modules/Platform/Windows-g77.cmake b/Modules/Platform/Windows-g77.cmake
index 7ab664b17802f495e198c9aaeb7052bfdd19f7fc..193b92527274e86603e6e1f915406a55186c9e8c 100644
--- a/Modules/Platform/Windows-g77.cmake
+++ b/Modules/Platform/Windows-g77.cmake
@@ -3,6 +3,7 @@ SET(CMAKE_STATIC_LIBRARY_PREFIX "lib")
 SET(CMAKE_STATIC_LIBRARY_SUFFIX ".a")
 SET(CMAKE_SHARED_LIBRARY_PREFIX "lib")          # lib
 SET(CMAKE_SHARED_LIBRARY_SUFFIX ".dll")          # .so
+SET(CMAKE_EXECUTABLE_SUFFIX ".exe")          # .exe
 SET(CMAKE_SHARED_MODULE_PREFIX "lib")          # lib
 SET(CMAKE_SHARED_MODULE_SUFFIX ".dll")          # .so
 SET(CMAKE_DL_LIBS "")
diff --git a/Modules/Platform/Windows-gcc.cmake b/Modules/Platform/Windows-gcc.cmake
index 3fb8186f60501d2ca55f1eabe77ab2605e3c90f8..949cc5667d5afbbe019eca74eafecd7ccc0c571d 100644
--- a/Modules/Platform/Windows-gcc.cmake
+++ b/Modules/Platform/Windows-gcc.cmake
@@ -5,6 +5,7 @@ SET(CMAKE_SHARED_LIBRARY_PREFIX "lib")          # lib
 SET(CMAKE_SHARED_LIBRARY_SUFFIX ".dll")          # .so
 SET(CMAKE_SHARED_MODULE_PREFIX "lib")          # lib
 SET(CMAKE_SHARED_MODULE_SUFFIX ".dll")          # .so
+SET(CMAKE_EXECUTABLE_SUFFIX ".exe")          # .exe
 SET(CMAKE_DL_LIBS "")
 SET(CMAKE_SHARED_LIBRARY_C_FLAGS "")            # -pic 
 SET(CMAKE_SHARED_LIBRARY_CXX_FLAGS "")            # -pic 
diff --git a/Modules/Platform/Windows.cmake b/Modules/Platform/Windows.cmake
index 29198b5b93d9484fb9edfee6cb3e7a1c95d2940c..163d3f6c140bbe0b6636d8a3ebca78629beab27a 100644
--- a/Modules/Platform/Windows.cmake
+++ b/Modules/Platform/Windows.cmake
@@ -2,6 +2,7 @@ SET(CMAKE_STATIC_LIBRARY_PREFIX "")
 SET(CMAKE_STATIC_LIBRARY_SUFFIX ".lib")
 SET(CMAKE_SHARED_LIBRARY_PREFIX "")          # lib
 SET(CMAKE_SHARED_LIBRARY_SUFFIX ".dll")          # .so
+SET(CMAKE_EXECUTABLE_SUFFIX ".exe")          # .exe
 SET(CMAKE_LINK_LIBRARY_SUFFIX ".lib")
 SET(CMAKE_DL_LIBS "")
 
diff --git a/Source/cmTarget.cxx b/Source/cmTarget.cxx
index 4e2b01c2e7fbde6ffc05ea097589015c20362227..61f54820bb8061aa179a6da27faa52de7a4d3ca3 100644
--- a/Source/cmTarget.cxx
+++ b/Source/cmTarget.cxx
@@ -914,6 +914,7 @@ const char* cmTarget::GetSuffixVariableInternal(TargetType type)
     case cmTarget::MODULE_LIBRARY:
       return "CMAKE_SHARED_MODULE_SUFFIX";
     case cmTarget::EXECUTABLE:
+      return "CMAKE_EXECUTABLE_SUFFIX";
     case cmTarget::UTILITY:
     case cmTarget::INSTALL_FILES:
     case cmTarget::INSTALL_PROGRAMS:
@@ -956,10 +957,6 @@ std::string cmTarget::GetFullNameInternal(TargetType type)
 {
   const char* targetPrefix = this->GetProperty("PREFIX");
   const char* targetSuffix = this->GetProperty("SUFFIX");
-  if(!targetSuffix && type == cmTarget::EXECUTABLE)
-    {
-    targetSuffix = cmSystemTools::GetExecutableExtension();
-    }
   const char* prefixVar = this->GetPrefixVariableInternal(type);
   const char* suffixVar = this->GetSuffixVariableInternal(type);
   const char* ll =