소스 검색

cmCommonTargetGenerator: Store working directory for relative paths

The Makefile generators run tools with the current working directory set
to the subdirectory of the build tree for the each target.  The Ninja
generator runs tools with the current working directory set to the top
of the build tree.  Tell cmCommonTargetGenerator where the working
directory will be so it can compute proper relative paths.
Brad King 10 년 전
부모
커밋
70c21301b2
4개의 변경된 파일12개의 추가작업 그리고 6개의 파일을 삭제
  1. 7 3
      Source/cmCommonTargetGenerator.cxx
  2. 3 1
      Source/cmCommonTargetGenerator.h
  3. 1 1
      Source/cmMakefileTargetGenerator.cxx
  4. 1 1
      Source/cmNinjaTargetGenerator.cxx

+ 7 - 3
Source/cmCommonTargetGenerator.cxx

@@ -20,8 +20,12 @@
 #include "cmSystemTools.h"
 #include "cmTarget.h"
 
-cmCommonTargetGenerator::cmCommonTargetGenerator(cmGeneratorTarget* gt)
-  : GeneratorTarget(gt)
+cmCommonTargetGenerator::cmCommonTargetGenerator(
+  cmOutputConverter::RelativeRoot wd,
+  cmGeneratorTarget* gt
+  )
+  : WorkingDirectory(wd)
+  , GeneratorTarget(gt)
   , Target(gt->Target)
   , Makefile(gt->Makefile)
   , LocalGenerator(static_cast<cmLocalCommonGenerator*>(gt->LocalGenerator))
@@ -152,7 +156,7 @@ void cmCommonTargetGenerator::AddFortranFlags(std::string& flags)
   if (!mod_dir.empty())
     {
     mod_dir = this->Convert(mod_dir,
-                            cmLocalGenerator::START_OUTPUT,
+                            this->WorkingDirectory,
                             cmLocalGenerator::SHELL);
     }
   else

+ 3 - 1
Source/cmCommonTargetGenerator.h

@@ -29,7 +29,8 @@ class cmTarget;
 class cmCommonTargetGenerator
 {
 public:
-  cmCommonTargetGenerator(cmGeneratorTarget* gt);
+  cmCommonTargetGenerator(cmOutputConverter::RelativeRoot wd,
+                          cmGeneratorTarget* gt);
   virtual ~cmCommonTargetGenerator();
 
   std::string const& GetConfigName() const;
@@ -46,6 +47,7 @@ protected:
   // Helper to add flag for windows .def file.
   void AddModuleDefinitionFlag(std::string& flags);
 
+  cmOutputConverter::RelativeRoot WorkingDirectory;
   cmGeneratorTarget* GeneratorTarget;
   cmTarget* Target;
   cmMakefile* Makefile;

+ 1 - 1
Source/cmMakefileTargetGenerator.cxx

@@ -33,7 +33,7 @@
 #include <ctype.h>
 
 cmMakefileTargetGenerator::cmMakefileTargetGenerator(cmGeneratorTarget* target)
-  : cmCommonTargetGenerator(target)
+  : cmCommonTargetGenerator(cmOutputConverter::START_OUTPUT, target)
   , OSXBundleGenerator(0)
   , MacOSXContentGenerator(0)
 {

+ 1 - 1
Source/cmNinjaTargetGenerator.cxx

@@ -58,7 +58,7 @@ cmNinjaTargetGenerator::New(cmGeneratorTarget* target)
 }
 
 cmNinjaTargetGenerator::cmNinjaTargetGenerator(cmGeneratorTarget* target)
-  : cmCommonTargetGenerator(target),
+  : cmCommonTargetGenerator(cmOutputConverter::HOME_OUTPUT, target),
     MacOSXContentGenerator(0),
     OSXBundleGenerator(0),
     MacContentFolders(),