Skip to content
  • Brad King's avatar
    Add policy CMP0019 to skip include/link variable re-expansion · 711b63f7
    Brad King authored
    Historically CMake has always expanded ${} variable references in the
    values given to include_directories(), link_directories(), and
    link_libraries().  This has been unnecessary since general ${}
    evaluation syntax was added to the language a LONG time ago, but has
    remained for compatibility with VERY early CMake versions.
    
    For a long time the re-expansion was a lightweight operation because it
    was only processed once at the directory level and the fast-path of
    cmMakefile::ExpandVariablesInString was usually taken because values did
    not have any '$' in them.  Then commit d899eb71 (Call
    ExpandVariablesInString for each target's INCLUDE_DIRECTORIES,
    2012-02-22) made the operation a bit heavier because the expansion is
    now needed on a per-target basis.  In the future we will support
    generator expressions in INCLUDE_DIRECTORIES with $<> syntax, so the
    fast-path in cmMakefile::ExpandVariablesInString will no longer be taken
    and re-expansion will be very expensive.
    
    Add policy CMP0019 to skip the re-expansion altogether in NEW behavior.
    In OLD behavior perform the expansion but improve the fast-path
    heuristic to match ${} but not $<>.  If the policy is not set then warn
    if expansion actually does anything.  We expect this to be encountered
    very rarely in practice.
    711b63f7