mirror of
https://github.com/Kitware/CMake.git
synced 2025-10-14 02:08:27 +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;
|
std::vector<cmSourceFile const*> objectFiles;
|
||||||
depender->GetExternalObjects(objectFiles, it);
|
depender->GetExternalObjects(objectFiles, it);
|
||||||
for (cmSourceFile const* o : objectFiles) {
|
for (cmSourceFile const* o : objectFiles) {
|
||||||
std::string const& objLib = o->GetObjectLibrary();
|
this->AddObjectDepends(depender_index, o, emitted);
|
||||||
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);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -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,
|
void cmComputeTargetDepends::AddTargetDepend(int depender_index,
|
||||||
cmLinkItem const& dependee_name,
|
cmLinkItem const& dependee_name,
|
||||||
bool linking, bool cross)
|
bool linking, bool cross)
|
||||||
|
@@ -16,6 +16,7 @@ class cmComputeComponentGraph;
|
|||||||
class cmGeneratorTarget;
|
class cmGeneratorTarget;
|
||||||
class cmGlobalGenerator;
|
class cmGlobalGenerator;
|
||||||
class cmLinkItem;
|
class cmLinkItem;
|
||||||
|
class cmSourceFile;
|
||||||
class cmTargetDependSet;
|
class cmTargetDependSet;
|
||||||
|
|
||||||
/** \class cmComputeTargetDepends
|
/** \class cmComputeTargetDepends
|
||||||
@@ -71,6 +72,8 @@ private:
|
|||||||
cmListFileBacktrace const& dependee_backtrace,
|
cmListFileBacktrace const& dependee_backtrace,
|
||||||
const std::string& config,
|
const std::string& config,
|
||||||
std::set<cmLinkItem>& emitted);
|
std::set<cmLinkItem>& emitted);
|
||||||
|
void AddObjectDepends(int depender_index, cmSourceFile const* o,
|
||||||
|
std::set<cmLinkItem>& emitted);
|
||||||
cmGlobalGenerator* GlobalGenerator;
|
cmGlobalGenerator* GlobalGenerator;
|
||||||
bool DebugMode;
|
bool DebugMode;
|
||||||
bool NoCycles;
|
bool NoCycles;
|
||||||
|
Reference in New Issue
Block a user