فهرست منبع

ENH: Modified GetObjectFileNameWithoutTarget to use relative paths for object file names with sources above the current directory so long as the relative path conversion works.

Brad King 18 سال پیش
والد
کامیت
b90e241a31
1فایلهای تغییر یافته به همراه8 افزوده شده و 9 حذف شده
  1. 8 9
      Source/cmLocalGenerator.cxx

+ 8 - 9
Source/cmLocalGenerator.cxx

@@ -2461,21 +2461,20 @@ std::string& cmLocalGenerator::CreateSafeUniqueObjectFileName(const char* sin)
 std::string
 cmLocalGenerator::GetObjectFileNameWithoutTarget(const cmSourceFile& source)
 {
-  // If the source file is located below the current binary directory
-  // then use that relative path for the object file name.
+  // Construct the object file name using the full path to the source
+  // file which is its only unique identification.  Convert the path
+  // to be relative to the current binary directory if possible.
   std::string objectName = this->Convert(source.GetFullPath().c_str(),
                                          START_OUTPUT);
-  if(cmSystemTools::FileIsFullPath(objectName.c_str()) ||
-     objectName.empty() || objectName[0] == '.')
+  if(cmSystemTools::FileIsFullPath(objectName.c_str()) || objectName.empty())
     {
-    // If the source file is located below the current source
-    // directory then use that relative path for the object file name.
-    // Otherwise just use the relative path from the current binary
-    // directory.
+    // If the source file can be referenced as a relative path from
+    // the source tree use that relative path to construct the object
+    // name.
     std::string relFromSource = this->Convert(source.GetFullPath().c_str(),
                                               START);
     if(!cmSystemTools::FileIsFullPath(relFromSource.c_str()) &&
-       !relFromSource.empty() && relFromSource[0] != '.')
+       !relFromSource.empty())
       {
       objectName = relFromSource;
       }