Просмотр исходного кода

Extend the cmTargetPropCommandBase interface property handling.

This can be used to handle INTERFACE SYSTEM include directories
in particular.
Stephen Kelly 12 лет назад
Родитель
Сommit
286f227709
2 измененных файлов с 25 добавлено и 14 удалено
  1. 22 14
      Source/cmTargetPropCommandBase.cxx
  2. 3 0
      Source/cmTargetPropCommandBase.h

+ 22 - 14
Source/cmTargetPropCommandBase.cxx

@@ -126,19 +126,27 @@ void cmTargetPropCommandBase
     }
   if (scope == "INTERFACE" || scope == "PUBLIC")
     {
-    if (prepend)
-      {
-      const std::string propName = std::string("INTERFACE_") + this->Property;
-      const char *propValue = this->Target->GetProperty(propName.c_str());
-      const std::string totalContent = this->Join(content) + (propValue
-                                                ? std::string(";") + propValue
-                                                : std::string());
-      this->Target->SetProperty(propName.c_str(), totalContent.c_str());
-      }
-    else
-      {
-      this->Target->AppendProperty(("INTERFACE_" + this->Property).c_str(),
-                                   this->Join(content).c_str());
-      }
+    this->HandleInterfaceContent(this->Target, content, prepend);
+    }
+}
+
+//----------------------------------------------------------------------------
+void cmTargetPropCommandBase::HandleInterfaceContent(cmTarget *tgt,
+                                  const std::vector<std::string> &content,
+                                  bool prepend)
+{
+  if (prepend)
+    {
+    const std::string propName = std::string("INTERFACE_") + this->Property;
+    const char *propValue = tgt->GetProperty(propName.c_str());
+    const std::string totalContent = this->Join(content) + (propValue
+                                              ? std::string(";") + propValue
+                                              : std::string());
+    tgt->SetProperty(propName.c_str(), totalContent.c_str());
+    }
+  else
+    {
+    tgt->AppendProperty(("INTERFACE_" + this->Property).c_str(),
+                          this->Join(content).c_str());
     }
 }

+ 3 - 0
Source/cmTargetPropCommandBase.h

@@ -36,6 +36,9 @@ protected:
   std::string Property;
   cmTarget *Target;
 
+  virtual void HandleInterfaceContent(cmTarget *tgt,
+                                   const std::vector<std::string> &content,
+                                   bool prepend);
 private:
   virtual void HandleImportedTarget(const std::string &tgt) = 0;
   virtual void HandleMissingTarget(const std::string &name) = 0;