cmComputeTargetDepends: Track object library depends.
Relieve cmGeneratorTarget of that responsibility.
This commit is contained in:
parent
e5da9e51d0
commit
c355d10865
@ -16,6 +16,7 @@
|
|||||||
#include "cmLocalGenerator.h"
|
#include "cmLocalGenerator.h"
|
||||||
#include "cmMakefile.h"
|
#include "cmMakefile.h"
|
||||||
#include "cmSystemTools.h"
|
#include "cmSystemTools.h"
|
||||||
|
#include "cmSourceFile.h"
|
||||||
#include "cmTarget.h"
|
#include "cmTarget.h"
|
||||||
#include "cmake.h"
|
#include "cmake.h"
|
||||||
|
|
||||||
@ -213,6 +214,34 @@ void cmComputeTargetDepends::CollectTargetDepends(int depender_index)
|
|||||||
{
|
{
|
||||||
std::set<std::string> emitted;
|
std::set<std::string> emitted;
|
||||||
{
|
{
|
||||||
|
cmGeneratorTarget* gt = depender->GetMakefile()->GetLocalGenerator()
|
||||||
|
->GetGlobalGenerator()
|
||||||
|
->GetGeneratorTarget(depender);
|
||||||
|
std::vector<cmSourceFile const*> objectFiles;
|
||||||
|
gt->GetExternalObjects(objectFiles);
|
||||||
|
for(std::vector<cmSourceFile const*>::const_iterator
|
||||||
|
it = objectFiles.begin(); it != objectFiles.end(); ++it)
|
||||||
|
{
|
||||||
|
std::string objLib = (*it)->GetObjectLibrary();
|
||||||
|
if (!objLib.empty() && emitted.insert(objLib).second)
|
||||||
|
{
|
||||||
|
if(depender->GetType() != cmTarget::EXECUTABLE &&
|
||||||
|
depender->GetType() != cmTarget::STATIC_LIBRARY &&
|
||||||
|
depender->GetType() != cmTarget::SHARED_LIBRARY &&
|
||||||
|
depender->GetType() != cmTarget::MODULE_LIBRARY)
|
||||||
|
{
|
||||||
|
this->GlobalGenerator->GetCMakeInstance()
|
||||||
|
->IssueMessage(cmake::FATAL_ERROR,
|
||||||
|
"Only executables and non-OBJECT libraries may "
|
||||||
|
"reference target objects.",
|
||||||
|
depender->GetBacktrace());
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
const_cast<cmTarget*>(depender)->AddUtility(objLib);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
{
|
||||||
std::vector<std::string> tlibs;
|
std::vector<std::string> tlibs;
|
||||||
depender->GetDirectLinkLibraries("", tlibs, depender);
|
depender->GetDirectLinkLibraries("", tlibs, depender);
|
||||||
// A target should not depend on itself.
|
// A target should not depend on itself.
|
||||||
|
@ -528,7 +528,6 @@ void cmGeneratorTarget::LookupObjectLibraries()
|
|||||||
this->Target->GetBacktrace());
|
this->Target->GetBacktrace());
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
this->Target->AddUtility(objLib->GetName());
|
|
||||||
this->ObjectLibraries.push_back(objLib);
|
this->ObjectLibraries.push_back(objLib);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
Loading…
x
Reference in New Issue
Block a user