summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBrad King <brad.king@kitware.com>2017-04-11 18:42:39 (GMT)
committerBrad King <brad.king@kitware.com>2017-04-18 13:03:32 (GMT)
commit930042f2d95e83047231457f4d9134c74b8744fc (patch)
treecd43b9afbde99909cdbacba853dd49384699d999
parent3ab4681efa6db7339af36218fffea165ad1186f3 (diff)
downloadCMake-930042f2d95e83047231457f4d9134c74b8744fc.zip
CMake-930042f2d95e83047231457f4d9134c74b8744fc.tar.gz
CMake-930042f2d95e83047231457f4d9134c74b8744fc.tar.bz2
cmGeneratorTarget: Factor out a GetTargetObjectNames method
-rw-r--r--Source/cmGeneratorExpressionNode.cxx40
-rw-r--r--Source/cmGeneratorTarget.cxx27
-rw-r--r--Source/cmGeneratorTarget.h5
3 files changed, 43 insertions, 29 deletions
diff --git a/Source/cmGeneratorExpressionNode.cxx b/Source/cmGeneratorExpressionNode.cxx
index 8fee119..29ad5d1 100644
--- a/Source/cmGeneratorExpressionNode.cxx
+++ b/Source/cmGeneratorExpressionNode.cxx
@@ -33,8 +33,6 @@
#include <string.h>
#include <utility>
-class cmSourceFile;
-
std::string cmGeneratorExpressionNode::EvaluateDependentExpression(
std::string const& prop, cmLocalGenerator* lg,
cmGeneratorExpressionContext* context, cmGeneratorTarget const* headTarget,
@@ -1254,38 +1252,22 @@ static const struct TargetObjectsNode : public cmGeneratorExpressionNode
return std::string();
}
- std::vector<cmSourceFile const*> objectSources;
- gt->GetObjectSources(objectSources, context->Config);
- std::map<cmSourceFile const*, std::string> mapping;
+ std::vector<std::string> objects;
+ gt->GetTargetObjectNames(context->Config, objects);
- for (std::vector<cmSourceFile const*>::const_iterator it =
- objectSources.begin();
- it != objectSources.end(); ++it) {
- mapping[*it];
+ for (std::vector<std::string>::iterator oi = objects.begin();
+ oi != objects.end(); ++oi) {
+ *oi = gt->ObjectDirectory + *oi;
}
- gt->LocalGenerator->ComputeObjectFilenames(mapping, gt);
-
+ // Create the cmSourceFile instances in the referencing directory.
cmMakefile* mf = context->LG->GetMakefile();
-
- std::string obj_dir = gt->ObjectDirectory;
- std::string result;
- const char* sep = "";
- for (std::vector<cmSourceFile const*>::const_iterator it =
- objectSources.begin();
- it != objectSources.end(); ++it) {
- // Find the object file name corresponding to this source file.
- std::map<cmSourceFile const*, std::string>::const_iterator map_it =
- mapping.find(*it);
- // It must exist because we populated the mapping just above.
- assert(!map_it->second.empty());
- result += sep;
- std::string objFile = obj_dir + map_it->second;
- mf->AddTargetObject(tgtName, objFile);
- result += objFile;
- sep = ";";
+ for (std::vector<std::string>::iterator oi = objects.begin();
+ oi != objects.end(); ++oi) {
+ mf->AddTargetObject(tgtName, *oi);
}
- return result;
+
+ return cmJoin(objects, ";");
}
} targetObjectsNode;
diff --git a/Source/cmGeneratorTarget.cxx b/Source/cmGeneratorTarget.cxx
index 35b2603..4ce1eca 100644
--- a/Source/cmGeneratorTarget.cxx
+++ b/Source/cmGeneratorTarget.cxx
@@ -3254,6 +3254,33 @@ std::string cmGeneratorTarget::GetPDBName(const std::string& config) const
return prefix + base + ".pdb";
}
+void cmGeneratorTarget::GetTargetObjectNames(
+ std::string const& config, std::vector<std::string>& objects) const
+{
+ std::vector<cmSourceFile const*> objectSources;
+ this->GetObjectSources(objectSources, config);
+ std::map<cmSourceFile const*, std::string> mapping;
+
+ for (std::vector<cmSourceFile const*>::const_iterator it =
+ objectSources.begin();
+ it != objectSources.end(); ++it) {
+ mapping[*it];
+ }
+
+ this->LocalGenerator->ComputeObjectFilenames(mapping, this);
+
+ for (std::vector<cmSourceFile const*>::const_iterator it =
+ objectSources.begin();
+ it != objectSources.end(); ++it) {
+ // Find the object file name corresponding to this source file.
+ std::map<cmSourceFile const*, std::string>::const_iterator map_it =
+ mapping.find(*it);
+ // It must exist because we populated the mapping just above.
+ assert(!map_it->second.empty());
+ objects.push_back(map_it->second);
+ }
+}
+
bool cmGeneratorTarget::StrictTargetComparison::operator()(
cmGeneratorTarget const* t1, cmGeneratorTarget const* t2) const
{
diff --git a/Source/cmGeneratorTarget.h b/Source/cmGeneratorTarget.h
index 2ea2f2f..bad67d0 100644
--- a/Source/cmGeneratorTarget.h
+++ b/Source/cmGeneratorTarget.h
@@ -209,6 +209,11 @@ public:
bool realname) const;
std::string NormalGetRealName(const std::string& config) const;
+ /** Get the names of an object library's object files underneath
+ its object file directory. */
+ void GetTargetObjectNames(std::string const& config,
+ std::vector<std::string>& objects) const;
+
/** What hierarchy level should the reported directory contain */
enum BundleDirectoryLevel
{