浏览代码

COMP: Even more global target fixes

Andy Cedilnik 19 年之前
父节点
当前提交
c4156b4531

+ 3 - 1
Source/cmGlobalGenerator.cxx

@@ -1309,11 +1309,13 @@ void cmGlobalGenerator::CreateDefaultGlobalTargets(cmTargets* targets)
     cmd = "$(CMAKE_COMMAND)";
     }
   singleLine.push_back(cmd.c_str());
-  const char* cmakeCfgIntDir = mf->GetDefinition("CMAKE_CFG_INTDIR");
+  const char* cmakeCfgIntDir = this->GetCMakeCFGInitDirectory();
+  std::cout << "CMakeCFG: " << cmakeCfgIntDir << std::endl;
   if ( cmakeCfgIntDir && *cmakeCfgIntDir && cmakeCfgIntDir[1] != '.' )
     {
     std::string cfgArg = "-DBUILD_TYPE=";
     cfgArg += mf->GetDefinition("CMAKE_CFG_INTDIR");
+    singleLine.push_back(cfgArg);
     }
   singleLine.push_back("-P");
   singleLine.push_back("cmake_install.cmake");

+ 3 - 0
Source/cmGlobalGenerator.h

@@ -131,6 +131,9 @@ public:
   ///! What is the output extension for a given source file extension.
   const char* GetLanguageOutputExtensionFromExtension(const char* lang);
 
+  ///! What is the configurations directory variable called?
+  virtual const char* GetCMakeCFGInitDirectory()  { return "."; }
+
   /**
    * Convert the given remote path to a relative path with respect to
    * the given local path.  The local path must be given in component

+ 0 - 1
Source/cmGlobalUnixMakefileGenerator3.cxx

@@ -31,7 +31,6 @@ cmGlobalUnixMakefileGenerator3::cmGlobalUnixMakefileGenerator3()
 void cmGlobalUnixMakefileGenerator3
 ::EnableLanguage(std::vector<std::string>const& languages, cmMakefile *mf)
 {
-  mf->AddDefinition("CMAKE_CFG_INTDIR",".");
   this->cmGlobalGenerator::EnableLanguage(languages, mf);
   std::string path;
   for(std::vector<std::string>::const_iterator l = languages.begin();

+ 2 - 2
Source/cmGlobalVisualStudio6Generator.cxx

@@ -27,7 +27,6 @@ cmGlobalVisualStudio6Generator::cmGlobalVisualStudio6Generator()
 void cmGlobalVisualStudio6Generator::EnableLanguage(std::vector<std::string>const& lang,
                                                     cmMakefile *mf)
 {
-  mf->AddDefinition("CMAKE_CFG_INTDIR","$(IntDir)");
   mf->AddDefinition("CMAKE_GENERATOR_CC", "cl");
   mf->AddDefinition("CMAKE_GENERATOR_CXX", "cl");
   mf->AddDefinition("CMAKE_GENERATOR_RC", "rc"); 
@@ -246,7 +245,8 @@ void cmGlobalVisualStudio6Generator::WriteDSWFile(std::ostream& fout,
               {
               if (al->second.IsInAll())
                 {
-                if (al->second.GetType() == cmTarget::UTILITY)
+                if (al->second.GetType() == cmTarget::UTILITY ||
+                    al->second.GetType() == cmTarget::GLOBAL_TARGET)
                   {
                   l->second.AddUtility(al->first.c_str());
                   }

+ 2 - 0
Source/cmGlobalVisualStudio6Generator.h

@@ -78,6 +78,8 @@ public:
   /** Append the subdirectory for the given configuration.  */
   virtual void AppendDirectoryForConfig(const char* config, std::string& dir);
 
+  ///! What is the configurations directory variable called?
+  virtual const char* GetCMakeCFGInitDirectory()  { return "$(IntDir)"; }
 private:
   void GenerateConfigurations(cmMakefile* mf);
   void WriteDSWFile(std::ostream& fout);

+ 1 - 1
Source/cmGlobalVisualStudio71Generator.cxx

@@ -107,7 +107,7 @@ void cmGlobalVisualStudio71Generator::WriteSLNFile(std::ostream& fout,
               {
               if (al->second.IsInAll())
                 {
-                if (al->second.GetType() == cmTarget::UTILITY &&
+                if (al->second.GetType() == cmTarget::UTILITY ||
                     al->second.GetType() == cmTarget::GLOBAL_TARGET)
                   {
                   l->second.AddUtility(al->first.c_str());

+ 1 - 2
Source/cmGlobalVisualStudio7Generator.cxx

@@ -31,7 +31,6 @@ cmGlobalVisualStudio7Generator::cmGlobalVisualStudio7Generator()
 void cmGlobalVisualStudio7Generator::EnableLanguage(std::vector<std::string>const &  lang, 
                                                     cmMakefile *mf)
 {
-  mf->AddDefinition("CMAKE_CFG_INTDIR","$(OutDir)");
   mf->AddDefinition("CMAKE_GENERATOR_CC", "cl");
   mf->AddDefinition("CMAKE_GENERATOR_CXX", "cl");
   mf->AddDefinition("CMAKE_GENERATOR_RC", "rc");
@@ -315,7 +314,7 @@ void cmGlobalVisualStudio7Generator::WriteSLNFile(std::ostream& fout,
               {
               if (al->second.IsInAll())
                 {
-                if (al->second.GetType() == cmTarget::UTILITY &&
+                if (al->second.GetType() == cmTarget::UTILITY ||
                     al->second.GetType() == cmTarget::GLOBAL_TARGET)
                   {
                   l->second.AddUtility(al->first.c_str());

+ 4 - 0
Source/cmGlobalVisualStudio7Generator.h

@@ -84,6 +84,9 @@ public:
   /** Append the subdirectory for the given configuration.  */
   virtual void AppendDirectoryForConfig(const char* config, std::string& dir);
 
+  ///! What is the configurations directory variable called?
+  virtual const char* GetCMakeCFGInitDirectory()  { return "$(OutDir)"; }
+
 protected:
   virtual void OutputSLNFile(cmLocalGenerator* root, 
                              std::vector<cmLocalGenerator*>& generators);
@@ -103,6 +106,7 @@ protected:
                             const char* name, const char* path,
                             const std::vector<std::string>& dependencies);
 
+
   std::vector<std::string> m_Configurations;
   std::map<cmStdString, cmStdString> m_GUIDMap;
 

+ 3 - 0
Source/cmGlobalXCode21Generator.h

@@ -32,6 +32,9 @@ public:
   virtual void  WriteXCodePBXProj(std::ostream& fout,
                                   cmLocalGenerator* root,
                                   std::vector<cmLocalGenerator*>& generators);
+
+  ///! What is the configurations directory variable called?
+  virtual const char* GetCMakeCFGInitDirectory()  { return "$(CONFIGURATION)"; }
 };
 
 #endif

+ 0 - 2
Source/cmGlobalXCodeGenerator.cxx

@@ -111,11 +111,9 @@ void cmGlobalXCodeGenerator::EnableLanguage(std::vector<std::string>const&
   mf->AddDefinition("XCODE","1");
   if(m_XcodeVersion == 15)
     {
-    mf->AddDefinition("CMAKE_CFG_INTDIR",".");
     }
   else
     {
-    mf->AddDefinition("CMAKE_CFG_INTDIR","$(CONFIGURATION)");
     mf->AddCacheDefinition(
       "CMAKE_CONFIGURATION_TYPES",
       "Debug;Release;MinSizeRel;RelWithDebInfo",

+ 3 - 1
Source/cmGlobalXCodeGenerator.h

@@ -72,6 +72,9 @@ public:
   /** Append the subdirectory for the given configuration.  */
   virtual void AppendDirectoryForConfig(const char* config, std::string& dir);
 
+  ///! What is the configurations directory variable called?
+  virtual const char* GetCMakeCFGInitDirectory()  { return "."; }
+
 private: 
   cmXCodeObject* CreateOrGetPBXGroup(cmTarget& cmtarget,
                                      cmSourceGroup* sg);
@@ -148,7 +151,6 @@ private:
                           const char* varNameSuffix,
                           const char* default_flags);
 protected:
-
   int m_XcodeVersion;
   std::vector<cmXCodeObject*> m_XCodeObjects;
   cmXCodeObject* m_RootObject;

+ 3 - 4
Source/cmLocalVisualStudio6Generator.cxx

@@ -455,8 +455,8 @@ void cmLocalVisualStudio6Generator::WriteGroup(const cmSourceGroup *sg, cmTarget
       {
       cmSystemTools::ExpandListArgument(dependsValue, depends);
       }
-    if (source != libName || target.GetType() == cmTarget::UTILITY
-      || target.GetType() == cmTarget::GLOBAL_TARGET)
+    if (source != libName || target.GetType() == cmTarget::UTILITY ||
+      target.GetType() == cmTarget::GLOBAL_TARGET)
       {
       fout << "# Begin Source File\n\n";
         
@@ -721,8 +721,7 @@ cmLocalVisualStudio6Generator::CreateTargetRules(cmTarget &target,
 {
   std::string customRuleCode = "";
 
-  if (target.GetType() >= cmTarget::UTILITY ||
-    target.GetType() >= cmTarget::GLOBAL_TARGET)
+  if (target.GetType() >= cmTarget::UTILITY )
     {
     return customRuleCode;
     }

+ 1 - 2
Source/cmLocalVisualStudio7Generator.cxx

@@ -1220,8 +1220,7 @@ void cmLocalVisualStudio7Generator::OutputTargetRules(std::ostream& fout,
                                                       cmTarget &target, 
                                                       const char * /*libName*/)
 {
-  if (target.GetType() > cmTarget::UTILITY ||
-    target.GetType() > cmTarget::GLOBAL_TARGET)
+  if (target.GetType() > cmTarget::GLOBAL_TARGET)
     {
     return;
     }

+ 2 - 0
Source/cmMakefile.cxx

@@ -2040,6 +2040,8 @@ cmSourceFile* cmMakefile::AddSource(cmSourceFile const&sf)
   
 void cmMakefile::EnableLanguage(std::vector<std::string> const &  lang)
 {
+  this->AddDefinition("CMAKE_CFG_INTDIR",
+    m_LocalGenerator->GetGlobalGenerator()->GetCMakeCFGInitDirectory());
   m_LocalGenerator->GetGlobalGenerator()->EnableLanguage(lang, this);
 }
 

+ 2 - 2
Source/cmTarget.h

@@ -34,8 +34,8 @@ class cmTarget
 public:
   cmTarget();
   enum TargetType { EXECUTABLE, STATIC_LIBRARY,
-                    SHARED_LIBRARY, MODULE_LIBRARY, UTILITY, INSTALL_FILES, 
-                    INSTALL_PROGRAMS, GLOBAL_TARGET};
+                    SHARED_LIBRARY, MODULE_LIBRARY, UTILITY, GLOBAL_TARGET,
+                    INSTALL_FILES, INSTALL_PROGRAMS};
 
   enum CustomCommandType { PRE_BUILD, PRE_LINK, POST_BUILD };