소스 검색

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 14 년 전
부모
커밋
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;
 }
 
 //----------------------------------------------------------------------------