فهرست منبع

BUG: Do not remove the source file extension when computing an object file name. This addresses bug #6169. If CMAKE_BACKWARDS_COMPATIBILITY is 2.4 or lower maintain the old behavior so that existing build trees and old project releases are not affected.

Brad King 18 سال پیش
والد
کامیت
3efc6e40cb
3فایلهای تغییر یافته به همراه14 افزوده شده و 22 حذف شده
  1. 7 4
      Source/cmLocalGenerator.cxx
  2. 6 17
      Tests/ExternalOBJ/CMakeLists.txt
  3. 1 1
      Tests/MakeClean/ToClean/CMakeLists.txt

+ 7 - 4
Source/cmLocalGenerator.cxx

@@ -2753,11 +2753,14 @@ cmLocalGenerator
   // extension.
   if(!source.GetPropertyAsBool("KEEP_EXTENSION"))
     {
-    // Remove the original extension.
-    std::string::size_type dot_pos = objectName.rfind(".");
-    if(dot_pos != std::string::npos)
+    // Remove the original extension for CMake 2.4 compatibility.
+    if(this->NeedBackwardsCompatibility(2, 4))
       {
-      objectName = objectName.substr(0, dot_pos);
+      std::string::size_type dot_pos = objectName.rfind(".");
+      if(dot_pos != std::string::npos)
+        {
+        objectName = objectName.substr(0, dot_pos);
+        }
       }
 
     // Store the new extension.

+ 6 - 17
Tests/ExternalOBJ/CMakeLists.txt

@@ -18,37 +18,26 @@ TRY_COMPILE(EXTERNAL_OBJECT_BUILT
   external
   OUTPUT_VARIABLE OUTPUT
   )
-SET(EXTERNAL_OBJECT_NAME "external_object${CMAKE_CXX_OUTPUT_EXTENSION}")
 IF(EXTERNAL_OBJECT_BUILT)
   MESSAGE(
-    "Building ${EXTERNAL_OBJECT_NAME} succeeded with the following output:\n"
+    "Building external_object.cxx succeeded with the following output:\n"
     "[${OUTPUT}]"
     )
 ELSE(EXTERNAL_OBJECT_BUILT)
   MESSAGE(FATAL_ERROR
-    "Building ${EXTERNAL_OBJECT_NAME} failed with the following output:\n"
+    "Building external_object.cxx failed with the following output:\n"
     "[${OUTPUT}]"
     )
 ENDIF(EXTERNAL_OBJECT_BUILT)
 
 # Find the external object file.
-SET(BASE ${ExternalOBJ_BINARY_DIR}/Object)
-SET(EXTERNAL_OBJECT)
-FOREACH(dir external.dir . ${CMAKE_CONFIGURATION_TYPES})
-  IF(NOT EXTERNAL_OBJECT)
-    IF(EXISTS ${BASE}/${dir}/${EXTERNAL_OBJECT_NAME})
-      SET(EXTERNAL_OBJECT ${BASE}/${dir}/${EXTERNAL_OBJECT_NAME})
-    ENDIF(EXISTS ${BASE}/${dir}/${EXTERNAL_OBJECT_NAME})
-  ENDIF(NOT EXTERNAL_OBJECT)
-ENDFOREACH(dir)
-IF(NOT EXTERNAL_OBJECT)
-  FILE(GLOB_RECURSE EXTERNAL_OBJECT
-    "${ExternalOBJ_BINARY_DIR}/Object/${EXTERNAL_OBJECT_NAME}")
-ENDIF(NOT EXTERNAL_OBJECT)
+SET(DIR ${ExternalOBJ_BINARY_DIR}/Object)
+FILE(GLOB_RECURSE EXTERNAL_OBJECT
+  "${DIR}/external_object*${CMAKE_CXX_OUTPUT_EXTENSION}")
 IF(EXTERNAL_OBJECT)
   MESSAGE("Found \"${EXTERNAL_OBJECT}\".")
 ELSE(EXTERNAL_OBJECT)
-  MESSAGE(FATAL_ERROR "Could not find ${EXTERNAL_OBJECT_NAME}.")
+  MESSAGE(FATAL_ERROR "Could not find external object.")
 ENDIF(EXTERNAL_OBJECT)
 
 # Test creation of external objects by custom commands.

+ 1 - 1
Tests/MakeClean/ToClean/CMakeLists.txt

@@ -6,7 +6,7 @@ ADD_EXECUTABLE(toclean toclean.cxx)
 # List some build-time-generated files.
 GET_TARGET_PROPERTY(TOCLEAN_FILES toclean LOCATION)
 SET(TOCLEAN_FILES ${TOCLEAN_FILES}
-  "${ToClean_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/toclean.dir/toclean${CMAKE_CXX_OUTPUT_EXTENSION}")
+  "${ToClean_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/toclean.dir/toclean.cxx${CMAKE_CXX_OUTPUT_EXTENSION}")
 
 # Create a file that must be registered for cleaning.
 FILE(WRITE "${ToClean_BINARY_DIR}/Registered.txt"