Przeglądaj źródła

Pre-compute and store target object directory in cmGeneratorTarget

Add cmGeneratorTarget::ObjectDirectory member to hold the value.  In
ComputeTargetObjects set the value to the full path to the target object
directory including any necessary placeholder for the configuration
name.
Brad King 13 lat temu
rodzic
commit
f737bd416a

+ 5 - 0
Source/cmGeneratorTarget.h

@@ -43,6 +43,11 @@ public:
   std::map<cmSourceFile const*, std::string> Objects;
   std::set<cmSourceFile const*> ExplicitObjectName;
 
+  /** Full path with trailing slash to the top-level directory
+      holding object files for this target.  Includes the build
+      time config name placeholder if needed for the generator.  */
+  std::string ObjectDirectory;
+
 private:
   void ClassifySources();
 

+ 1 - 0
Source/cmGlobalUnixMakefileGenerator3.cxx

@@ -86,6 +86,7 @@ cmGlobalUnixMakefileGenerator3
   dir_max += "/";
   dir_max += gt->LocalGenerator->GetTargetDirectory(*target);
   dir_max += "/";
+  gt->ObjectDirectory = dir_max;
 
   // Compute the name of each object file.
   for(std::vector<cmSourceFile*>::iterator

+ 16 - 0
Source/cmGlobalVisualStudioGenerator.cxx

@@ -139,6 +139,22 @@ cmGlobalVisualStudioGenerator
       }
     gt->Objects[sf] = objectName;
     }
+
+  std::string dir = gt->Makefile->GetCurrentOutputDirectory();
+  dir += "/";
+  std::string tgtDir = lg->GetTargetDirectory(*gt->Target);
+  if(!tgtDir.empty())
+    {
+    dir += tgtDir;
+    dir += "/";
+    }
+  const char* cd = this->GetCMakeCFGIntDir();
+  if(cd && *cd)
+    {
+    dir += cd;
+    dir += "/";
+    }
+  gt->ObjectDirectory = dir;
 }
 
 //----------------------------------------------------------------------------