Quellcode durchsuchen

ENH: Added better default install location for windows builds. The previous default /usr/local did not make much sense. Now "%SystemDrive%/Program Files/PROJECT_NAME" is used, which is the windows equivalent to /usr/local.

Brad King vor 21 Jahren
Ursprung
Commit
7c7b173042
2 geänderte Dateien mit 39 neuen und 6 gelöschten Zeilen
  1. 17 6
      Modules/CMakeGenericSystem.cmake
  2. 22 0
      Source/cmLocalGenerator.cxx

+ 17 - 6
Modules/CMakeGenericSystem.cmake

@@ -23,16 +23,27 @@ ENDIF(CMAKE_COMPILER_IS_GNUCXX)
 
 SET (CMAKE_SKIP_RPATH "NO" CACHE BOOL
      "If set, runtime paths are not added when using shared libraries.")
-SET (CMAKE_INSTALL_PREFIX    /usr/local CACHE PATH 
-     "Install path prefix, prepended onto install directories.")
+
+# Choose a default install prefix for this platform.
+IF(UNIX)
+  SET(CMAKE_INSTALL_PREFIX "/usr/local"
+    CACHE PATH "Install path prefix, prepended onto install directories.")
+ELSE(UNIX)
+  IF("$ENV{SystemDrive}" MATCHES "^$")
+    SET(CMAKE_GENERIC_SYSTEM_DRIVE "C:")
+  ELSE("$ENV{SystemDrive}" MATCHES "^$")
+    SET(CMAKE_GENERIC_SYSTEM_DRIVE "$ENV{SystemDrive}")
+  ENDIF("$ENV{SystemDrive}" MATCHES "^$")
+  SET(CMAKE_INSTALL_PREFIX
+    "${CMAKE_GENERIC_SYSTEM_DRIVE}/Program Files/${PROJECT_NAME}"
+    CACHE PATH "Install path prefix, prepended onto install directories.")
+  SET(CMAKE_GENERIC_SYSTEM_DRIVE)
+  MARK_AS_ADVANCED(CMAKE_INSTALL_PREFIX)
+ENDIF(UNIX)
 
 MARK_AS_ADVANCED(
 CMAKE_SKIP_RPATH
 )
 
-IF(NOT UNIX)
-  MARK_AS_ADVANCED(CMAKE_INSTALL_PREFIX)
-ENDIF(NOT UNIX)
-
 # always include the gcc compiler information
 INCLUDE(Platform/gcc)

+ 22 - 0
Source/cmLocalGenerator.cxx

@@ -75,10 +75,32 @@ void cmLocalGenerator::GenerateInstallRules()
   const cmTargets &tgts = m_Makefile->GetTargets();
   const char* prefix
     = m_Makefile->GetDefinition("CMAKE_INSTALL_PREFIX");
+#if defined(_WIN32) && !defined(__CYGWIN__)
+  std::string prefix_win32;
+  if(!prefix)
+    {
+    if(!cmSystemTools::GetEnv("SystemDrive", prefix_win32))
+      {
+      prefix_win32 = "C:";
+      }
+    const char* project_name = m_Makefile->GetDefinition("PROJECT_NAME");
+    if(project_name && project_name[0])
+      {
+      prefix_win32 += "/Program Files/";
+      prefix_win32 += project_name;
+      }
+    else
+      {
+      prefix_win32 += "/InstalledCMakeProject";
+      }
+    prefix = prefix_win32.c_str();
+    }
+#else
   if (!prefix)
     {
     prefix = "/usr/local";
     }
+#endif
 
   std::string file = m_Makefile->GetStartOutputDirectory();
   std::string homedir = m_Makefile->GetHomeOutputDirectory();