Commit bab24e78 authored by Kyle Edwards's avatar Kyle Edwards

target_link_libraries: Propagate dependencies of object libraries

Prior to this commit, linking against an object library did not
propagate private link dependencies of object libraries to their
consuming targets. This change implements the correct behavior.

Fixes: #18692
Co-Author: Brad King <brad.king@kitware.com>
parent 8c7367e3
Pipeline #125853 passed with stage
object-library-link
-------------------
* Object library linking has been fixed to propagate transitive link
dependencies of object libraries to consuming targets.
......@@ -451,7 +451,8 @@ bool cmTargetLinkLibrariesCommand::HandleLibrary(const std::string& lib,
// STATIC library.)
if (this->CurrentProcessingState == ProcessingKeywordPrivateInterface ||
this->CurrentProcessingState == ProcessingPlainPrivateInterface) {
if (this->Target->GetType() == cmStateEnums::STATIC_LIBRARY) {
if (this->Target->GetType() == cmStateEnums::STATIC_LIBRARY ||
this->Target->GetType() == cmStateEnums::OBJECT_LIBRARY) {
std::string configLib =
this->Target->GetDebugGeneratorExpressions(libRef, llt);
if (cmGeneratorExpression::IsValidTargetName(libRef) ||
......
......@@ -45,6 +45,7 @@ run_object_lib_build2(LinkObjRHSObject)
run_object_lib_build(LinkObjRHSShared2)
run_object_lib_build(LinkObjRHSStatic2)
run_object_lib_build2(LinkObjRHSObject2)
run_object_lib_build(TransitiveDependencies)
run_cmake(MissingSource)
run_cmake(ObjWithObj)
......
add_library(lib1 STATIC depends_obj0.c)
add_library(lib2 OBJECT a.c)
target_link_libraries(lib2 PRIVATE lib1)
add_executable(test exe2.c)
target_link_libraries(test PUBLIC lib2)
extern int myobj_foo(void);
int main(void)
{
return myobj_foo();
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment