mirror of
https://github.com/Kitware/CMake.git
synced 2025-10-13 17:47:49 +08:00
cmComputeTargetDepends: Factor out helper to add object library dependency
This commit is contained in:
@@ -233,26 +233,7 @@ void cmComputeTargetDepends::CollectTargetDepends(int depender_index)
|
||||
std::vector<cmSourceFile const*> objectFiles;
|
||||
depender->GetExternalObjects(objectFiles, it);
|
||||
for (cmSourceFile const* o : objectFiles) {
|
||||
std::string const& objLib = o->GetObjectLibrary();
|
||||
if (!objLib.empty()) {
|
||||
cmLinkItem const& objItem =
|
||||
depender->ResolveLinkItem(objLib, cmListFileBacktrace());
|
||||
if (emitted.insert(objItem).second) {
|
||||
if (depender->GetType() != cmStateEnums::EXECUTABLE &&
|
||||
depender->GetType() != cmStateEnums::STATIC_LIBRARY &&
|
||||
depender->GetType() != cmStateEnums::SHARED_LIBRARY &&
|
||||
depender->GetType() != cmStateEnums::MODULE_LIBRARY &&
|
||||
depender->GetType() != cmStateEnums::OBJECT_LIBRARY) {
|
||||
this->GlobalGenerator->GetCMakeInstance()->IssueMessage(
|
||||
MessageType::FATAL_ERROR,
|
||||
"Only executables and libraries may reference target objects.",
|
||||
depender->GetBacktrace());
|
||||
return;
|
||||
}
|
||||
const_cast<cmGeneratorTarget*>(depender)->Target->AddUtility(
|
||||
objLib, false);
|
||||
}
|
||||
}
|
||||
this->AddObjectDepends(depender_index, o, emitted);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -319,6 +300,34 @@ void cmComputeTargetDepends::AddInterfaceDepends(
|
||||
}
|
||||
}
|
||||
|
||||
void cmComputeTargetDepends::AddObjectDepends(int depender_index,
|
||||
cmSourceFile const* o,
|
||||
std::set<cmLinkItem>& emitted)
|
||||
{
|
||||
std::string const& objLib = o->GetObjectLibrary();
|
||||
if (objLib.empty()) {
|
||||
return;
|
||||
}
|
||||
cmGeneratorTarget const* depender = this->Targets[depender_index];
|
||||
cmLinkItem const& objItem =
|
||||
depender->ResolveLinkItem(objLib, cmListFileBacktrace());
|
||||
if (emitted.insert(objItem).second) {
|
||||
if (depender->GetType() != cmStateEnums::EXECUTABLE &&
|
||||
depender->GetType() != cmStateEnums::STATIC_LIBRARY &&
|
||||
depender->GetType() != cmStateEnums::SHARED_LIBRARY &&
|
||||
depender->GetType() != cmStateEnums::MODULE_LIBRARY &&
|
||||
depender->GetType() != cmStateEnums::OBJECT_LIBRARY) {
|
||||
this->GlobalGenerator->GetCMakeInstance()->IssueMessage(
|
||||
MessageType::FATAL_ERROR,
|
||||
"Only executables and libraries may reference target objects.",
|
||||
depender->GetBacktrace());
|
||||
return;
|
||||
}
|
||||
const_cast<cmGeneratorTarget*>(depender)->Target->AddUtility(objLib,
|
||||
false);
|
||||
}
|
||||
}
|
||||
|
||||
void cmComputeTargetDepends::AddTargetDepend(int depender_index,
|
||||
cmLinkItem const& dependee_name,
|
||||
bool linking, bool cross)
|
||||
|
@@ -16,6 +16,7 @@ class cmComputeComponentGraph;
|
||||
class cmGeneratorTarget;
|
||||
class cmGlobalGenerator;
|
||||
class cmLinkItem;
|
||||
class cmSourceFile;
|
||||
class cmTargetDependSet;
|
||||
|
||||
/** \class cmComputeTargetDepends
|
||||
@@ -71,6 +72,8 @@ private:
|
||||
cmListFileBacktrace const& dependee_backtrace,
|
||||
const std::string& config,
|
||||
std::set<cmLinkItem>& emitted);
|
||||
void AddObjectDepends(int depender_index, cmSourceFile const* o,
|
||||
std::set<cmLinkItem>& emitted);
|
||||
cmGlobalGenerator* GlobalGenerator;
|
||||
bool DebugMode;
|
||||
bool NoCycles;
|
||||
|
Reference in New Issue
Block a user