1
0
Эх сурвалжийг харах

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 жил өмнө
parent
commit
b90e241a31

+ 8 - 9
Source/cmLocalGenerator.cxx

@@ -2461,21 +2461,20 @@ std::string& cmLocalGenerator::CreateSafeUniqueObjectFileName(const char* sin)
 std::string
 std::string
 cmLocalGenerator::GetObjectFileNameWithoutTarget(const cmSourceFile& source)
 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(),
   std::string objectName = this->Convert(source.GetFullPath().c_str(),
                                          START_OUTPUT);
                                          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(),
     std::string relFromSource = this->Convert(source.GetFullPath().c_str(),
                                               START);
                                               START);
     if(!cmSystemTools::FileIsFullPath(relFromSource.c_str()) &&
     if(!cmSystemTools::FileIsFullPath(relFromSource.c_str()) &&
-       !relFromSource.empty() && relFromSource[0] != '.')
+       !relFromSource.empty())
       {
       {
       objectName = relFromSource;
       objectName = relFromSource;
       }
       }