Commit 724bd779 authored by Marc Chevrier's avatar Marc Chevrier

LINK_DEPENDS: add support of 'generator expressions'

parent cc9f88af
......@@ -10,3 +10,8 @@ linked if any of the named files is newer than it.
This property is supported only by Makefile and Ninja generators. It is
intended to specify dependencies on "linker scripts" for custom Makefile link
rules.
Contents of ``LINK_DEPENDS`` may use "generator expressions" with
the syntax ``$<...>``. See the :manual:`cmake-generator-expressions(7)`
manual for available expressions. See the :manual:`cmake-buildsystem(7)`
manual for more on defining buildsystem properties.
LINK_DEPENDS-property
---------------------
* The :prop_tgt:`LINK_DEPENDS` target property learned to support
:manual:`generator expressions <cmake-generator-expressions(7)>`.
......@@ -3027,15 +3027,21 @@ void cmGeneratorTarget::GetLinkDepends(std::vector<std::string>& result,
const std::string& config,
const std::string& language) const
{
if (const char* linkDepends = this->GetProperty("LINK_DEPENDS")) {
cmSystemTools::ExpandListArgument(linkDepends, result);
}
std::unordered_set<std::string> uniqueOptions;
std::vector<cmGeneratorTarget::TargetPropertyEntry*> linkDependsEntries;
std::unordered_set<std::string> uniqueOptions;
cmGeneratorExpressionDAGChecker dagChecker(this->GetName(), "LINK_DEPENDS",
nullptr, nullptr);
if (const char* linkDepends = this->GetProperty("LINK_DEPENDS")) {
std::vector<std::string> depends;
cmGeneratorExpression ge;
cmSystemTools::ExpandListArgument(linkDepends, depends);
for (const auto& depend : depends) {
std::unique_ptr<cmCompiledGeneratorExpression> cge = ge.Parse(depend);
linkDependsEntries.push_back(
new cmGeneratorTarget::TargetPropertyEntry(std::move(cge)));
}
}
AddInterfaceEntries(this, config, "INTERFACE_LINK_DEPENDS",
linkDependsEntries);
processLinkDepends(this, linkDependsEntries, result, uniqueOptions,
......
......@@ -106,7 +106,7 @@ set_property(
if(TEST_LINK_DEPENDS)
add_executable(linkdep linkdep.cxx)
set_property(TARGET linkdep PROPERTY LINK_DEPENDS ${TEST_LINK_DEPENDS})
set_property(TARGET linkdep PROPERTY LINK_DEPENDS $<1:${TEST_LINK_DEPENDS}>)
add_library(foo_interface INTERFACE)
set_property(TARGET foo_interface PROPERTY INTERFACE_LINK_DEPENDS $<1:${TEST_LINK_DEPENDS}>)
......
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