diff options
author | Brad King <brad.king@kitware.com> | 2020-01-14 18:14:55 (GMT) |
---|---|---|
committer | Brad King <brad.king@kitware.com> | 2020-01-16 18:24:27 (GMT) |
commit | f0e67da0615bd746626cab8e4dff2ba60c7aa2fe (patch) | |
tree | c27fb29e6b769cc5d501c42758ffd4c0892cec9a /Source/cmTarget.cxx | |
parent | acee6291039537a176fef70820648fc3d8cb4fb0 (diff) | |
download | CMake-f0e67da0615bd746626cab8e4dff2ba60c7aa2fe.zip CMake-f0e67da0615bd746626cab8e4dff2ba60c7aa2fe.tar.gz CMake-f0e67da0615bd746626cab8e4dff2ba60c7aa2fe.tar.bz2 |
target_link_libraries: Fix out-of-dir linking of a list of targets
In a case like
target_link_libraries(targetInOtherDir PUBLIC "$<1:a;b>")
then all entries in the list need to be looked up in the caller's
scope. Previously our `::@(directory-id)` suffix would apply only
to the last entry. Instead surround the entire entry by a pair
`::@(directory-id);...;::@` so that the `::@` syntax can encode
a directory lookup scope change evaluated as the list is processed.
Fixes: #20204
Diffstat (limited to 'Source/cmTarget.cxx')
-rw-r--r-- | Source/cmTarget.cxx | 13 |
1 files changed, 3 insertions, 10 deletions
diff --git a/Source/cmTarget.cxx b/Source/cmTarget.cxx index 9563321..457baf3 100644 --- a/Source/cmTarget.cxx +++ b/Source/cmTarget.cxx @@ -937,14 +937,7 @@ cmTarget::LinkLibraryVectorType const& cmTarget::GetOriginalLinkLibraries() return impl->OriginalLinkLibraries; } -void cmTarget::AddLinkLibrary(cmMakefile& mf, const std::string& lib, - cmTargetLinkLibraryType llt) -{ - this->AddLinkLibrary(mf, lib, lib, llt); -} - void cmTarget::AddLinkLibrary(cmMakefile& mf, std::string const& lib, - std::string const& libRef, cmTargetLinkLibraryType llt) { cmTarget* tgt = mf.FindTargetToUse(lib); @@ -953,13 +946,13 @@ void cmTarget::AddLinkLibrary(cmMakefile& mf, std::string const& lib, const std::string libName = (isNonImportedTarget && llt != GENERAL_LibraryType) - ? targetNameGenex(libRef) - : libRef; + ? targetNameGenex(lib) + : lib; this->AppendProperty("LINK_LIBRARIES", this->GetDebugGeneratorExpressions(libName, llt)); } - if (cmGeneratorExpression::Find(lib) != std::string::npos || lib != libRef || + if (cmGeneratorExpression::Find(lib) != std::string::npos || (tgt && (tgt->GetType() == cmStateEnums::INTERFACE_LIBRARY || tgt->GetType() == cmStateEnums::OBJECT_LIBRARY)) || |