浏览代码

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 年之前
父节点
当前提交
f737bd416a
共有 3 个文件被更改,包括 22 次插入0 次删除
  1. 5 0
      Source/cmGeneratorTarget.h
  2. 1 0
      Source/cmGlobalUnixMakefileGenerator3.cxx
  3. 16 0
      Source/cmGlobalVisualStudioGenerator.cxx

+ 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;
 }
 
 //----------------------------------------------------------------------------