summaryrefslogtreecommitdiffstats
path: root/Source/cmComputeTargetDepends.cxx
diff options
context:
space:
mode:
authorBrad King <brad.king@kitware.com>2021-05-26 14:56:10 (GMT)
committerBrad King <brad.king@kitware.com>2021-05-29 13:28:36 (GMT)
commit3941555d935afad8343c66f39579bfc611201a6f (patch)
tree4f5b55b32aa25a56fb6f6f10ba896585878e6331 /Source/cmComputeTargetDepends.cxx
parentf530b3a26729d0820c804e312b72e0061d6eeb4b (diff)
downloadCMake-3941555d935afad8343c66f39579bfc611201a6f.zip
CMake-3941555d935afad8343c66f39579bfc611201a6f.tar.gz
CMake-3941555d935afad8343c66f39579bfc611201a6f.tar.bz2
target_link_libraries: Place $<TARGET_OBJECTS> before libraries
Linkers always use object files explicitly specified on the command line regardless of where they appear. Move them to the front of the list of linked libraries in so that symbols required by the object files can be resolved by any library. Issue: #22149
Diffstat (limited to 'Source/cmComputeTargetDepends.cxx')
-rw-r--r--Source/cmComputeTargetDepends.cxx13
1 files changed, 13 insertions, 0 deletions
diff --git a/Source/cmComputeTargetDepends.cxx b/Source/cmComputeTargetDepends.cxx
index 0f23417..76712f4 100644
--- a/Source/cmComputeTargetDepends.cxx
+++ b/Source/cmComputeTargetDepends.cxx
@@ -20,6 +20,7 @@
#include "cmProperty.h"
#include "cmRange.h"
#include "cmSourceFile.h"
+#include "cmSourceFileLocationKind.h"
#include "cmState.h"
#include "cmStateTypes.h"
#include "cmStringAlgorithms.h"
@@ -227,6 +228,12 @@ void cmComputeTargetDepends::CollectTargetDepends(int depender_index)
this->AddInterfaceDepends(depender_index, lib, it, emitted);
}
}
+ for (cmLinkItem const& obj : impl->Objects) {
+ if (cmSourceFile const* o = depender->Makefile->GetSource(
+ obj.AsStr(), cmSourceFileLocationKind::Known)) {
+ this->AddObjectDepends(depender_index, o, emitted);
+ }
+ }
}
// Add dependencies on object libraries not otherwise handled above.
@@ -274,6 +281,12 @@ void cmComputeTargetDepends::AddInterfaceDepends(
this->AddInterfaceDepends(depender_index, libBT, config, emitted);
}
}
+ for (cmLinkItem const& obj : iface->Objects) {
+ if (cmSourceFile const* o = depender->Makefile->GetSource(
+ obj.AsStr(), cmSourceFileLocationKind::Known)) {
+ this->AddObjectDepends(depender_index, o, emitted);
+ }
+ }
}
}