Ver código fonte

ENH: use cd pwd trick for path for libnames

Bill Hoffman 22 anos atrás
pai
commit
fbd0bafca7
1 arquivos alterados com 23 adições e 9 exclusões
  1. 23 9
      Source/cmLocalUnixMakefileGenerator.cxx

+ 23 - 9
Source/cmLocalUnixMakefileGenerator.cxx

@@ -1072,16 +1072,27 @@ void cmLocalUnixMakefileGenerator::OutputLibraryRule(std::ostream& fout,
                         targetName, targetNameSO,
                         targetNameReal, targetNameBase);
 
+  std::string outpath;
+  std::string outdir = this->ConvertToRelativeOutputPath(m_LibraryOutputPath.c_str());
+  if(!m_WindowsShell && outdir.size())
+    {
+    outpath =  "\"`cd ";
+    }
+  outpath += outdir;
+  if(!m_WindowsShell && outdir.size())
+    {
+    outpath += ";pwd`\"/";
+    }
+  if(outdir.size() == 0 && !m_WindowsShell)
+    {
+    outpath = "\"`pwd`\"/";
+    }
   // The full path versions of the names.
-  std::string targetFullPath = m_LibraryOutputPath + targetName;
-  std::string targetFullPathSO = m_LibraryOutputPath + targetNameSO;
-  std::string targetFullPathReal = m_LibraryOutputPath + targetNameReal;
-  std::string targetFullPathBase = m_LibraryOutputPath + targetNameBase;
-  targetFullPath = this->ConvertToRelativeOutputPath(targetFullPath.c_str());
-  targetFullPathSO = this->ConvertToRelativeOutputPath(targetFullPathSO.c_str());
-  targetFullPathReal = this->ConvertToRelativeOutputPath(targetFullPathReal.c_str());
-  targetFullPathBase = this->ConvertToRelativeOutputPath(targetFullPathBase.c_str());
-
+  std::string targetFullPath = outpath + targetName;
+  std::string targetFullPathSO = outpath + targetNameSO;
+  std::string targetFullPathReal = outpath + targetNameReal;
+  std::string targetFullPathBase = outpath + targetNameBase;
+  
   // get the objects that are used to link this library
   std::string objs = "$(" + this->CreateMakeVariable(name, "_SRC_OBJS") + ") ";
   std::string objsQuoted = "$(" + this->CreateMakeVariable(name, "_SRC_OBJS_QUOTED") + ") ";
@@ -1165,6 +1176,9 @@ void cmLocalUnixMakefileGenerator::OutputLibraryRule(std::ostream& fout,
                               targetNameSO.c_str(),
                               linkFlags);
     }
+  
+  targetFullPath = m_LibraryOutputPath + targetName;
+  targetFullPath = this->ConvertToRelativeOutputPath(targetFullPath.c_str());
   this->OutputMakeRule(fout, comment,
                        targetFullPath.c_str(),
                        depend.c_str(),