1
0
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:
Brad King
2021-05-28 14:58:11 -04:00
parent 7f506b95a7
commit 83ad066ed1
2 changed files with 32 additions and 20 deletions

View File

@@ -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)

View File

@@ -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;