From 22829a130482511f8310caf74e190baee7ec763b Mon Sep 17 00:00:00 2001 From: Brad King Date: Mon, 10 Apr 2017 14:48:57 -0400 Subject: cmMakefile: Create an explicit "Object Libraries" source group The generators should not need special logic to place object library object files in this group. --- Source/cmGeneratorExpressionNode.cxx | 10 +++++----- Source/cmMakefile.cxx | 16 ++++++++++++++++ Source/cmMakefile.h | 4 ++++ 3 files changed, 25 insertions(+), 5 deletions(-) diff --git a/Source/cmGeneratorExpressionNode.cxx b/Source/cmGeneratorExpressionNode.cxx index 4443499..8b2c7aa 100644 --- a/Source/cmGeneratorExpressionNode.cxx +++ b/Source/cmGeneratorExpressionNode.cxx @@ -14,7 +14,6 @@ #include "cmMakefile.h" #include "cmOutputConverter.h" #include "cmPolicies.h" -#include "cmSourceFile.h" #include "cmStateTypes.h" #include "cmSystemTools.h" #include "cmTarget.h" @@ -34,6 +33,8 @@ #include #include +class cmSourceFile; + std::string cmGeneratorExpressionNode::EvaluateDependentExpression( std::string const& prop, cmLocalGenerator* lg, cmGeneratorExpressionContext* context, cmGeneratorTarget const* headTarget, @@ -1265,6 +1266,8 @@ static const struct TargetObjectsNode : public cmGeneratorExpressionNode gt->LocalGenerator->ComputeObjectFilenames(mapping, gt); + cmMakefile* mf = context->LG->GetMakefile(); + std::string obj_dir = gt->ObjectDirectory; std::string result; const char* sep = ""; @@ -1278,10 +1281,7 @@ static const struct TargetObjectsNode : public cmGeneratorExpressionNode assert(!map_it->second.empty()); result += sep; std::string objFile = obj_dir + map_it->second; - cmSourceFile* sf = - context->LG->GetMakefile()->GetOrCreateSource(objFile, true); - sf->SetObjectLibrary(tgtName); - sf->SetProperty("EXTERNAL_OBJECT", "1"); + mf->AddTargetObject(tgtName, objFile); result += objFile; sep = ";"; } diff --git a/Source/cmMakefile.cxx b/Source/cmMakefile.cxx index f7d822a..9c68ccf 100644 --- a/Source/cmMakefile.cxx +++ b/Source/cmMakefile.cxx @@ -94,6 +94,10 @@ cmMakefile::cmMakefile(cmGlobalGenerator* globalGenerator, this->AddSourceGroup("CMake Rules", "\\.rule$"); this->AddSourceGroup("Resources", "\\.plist$"); this->AddSourceGroup("Object Files", "\\.(lo|o|obj)$"); + + this->ObjectLibrariesSourceGroupIndex = this->SourceGroups.size(); + this->SourceGroups.push_back( + cmSourceGroup("Object Libraries", "^MATCH_NO_SOURCES$")); #endif } @@ -3124,6 +3128,18 @@ cmSourceFile* cmMakefile::GetOrCreateSource(const std::string& sourceName, return this->CreateSource(sourceName, generated); } +void cmMakefile::AddTargetObject(std::string const& tgtName, + std::string const& objFile) +{ + cmSourceFile* sf = this->GetOrCreateSource(objFile, true); + sf->SetObjectLibrary(tgtName); + sf->SetProperty("EXTERNAL_OBJECT", "1"); +#if defined(CMAKE_BUILD_WITH_CMAKE) + this->SourceGroups[this->ObjectLibrariesSourceGroupIndex].AddGroupFile( + sf->GetFullPath()); +#endif +} + void cmMakefile::EnableLanguage(std::vector const& lang, bool optional) { diff --git a/Source/cmMakefile.h b/Source/cmMakefile.h index 4e48c88..03a22fd 100644 --- a/Source/cmMakefile.h +++ b/Source/cmMakefile.h @@ -9,6 +9,7 @@ #include #include #include +#include #include #include @@ -406,6 +407,8 @@ public: cmSourceFile* GetOrCreateSource(const std::string& sourceName, bool generated = false); + void AddTargetObject(std::string const& tgtName, std::string const& objFile); + /** * Given a variable name, return its value (as a string). * If the variable is not found in this makefile instance, the @@ -817,6 +820,7 @@ protected: #if defined(CMAKE_BUILD_WITH_CMAKE) std::vector SourceGroups; + size_t ObjectLibrariesSourceGroupIndex; #endif std::vector FinalPassCommands; -- cgit v0.12