mirror of
https://gitlab.kitware.com/cmake/cmake.git
synced 2026-01-30 21:04:21 +00:00
When processing an indirect dependency of target `A` on target `C` via an interface library B, `cmComputeTargetDepends::AddTargetDepend` was not checking for duplicate dependencies, so that if `A` depended on `C` via multiple interface libraries, the dependency graph built in cmComputeTargetDepends would have duplicate edges. In a real project (LLVM libc) this was causing cmake to consume multiple gigabytes of RAM. Fixes: #27386
20 lines
669 B
CMake
20 lines
669 B
CMake
# Make two interface libraries.
|
|
add_library(lib1 INTERFACE)
|
|
add_library(lib2 INTERFACE)
|
|
|
|
# Top-level target that depends on both of them.
|
|
add_custom_target(top
|
|
COMMAND ${CMAKE_COMMAND} -E echo top
|
|
DEPENDS lib1 lib2)
|
|
|
|
# Lowest-level utility target that both libraries depend on.
|
|
add_custom_target(util
|
|
COMMAND ${CMAKE_COMMAND} -E echo util)
|
|
add_dependencies(lib1 util)
|
|
add_dependencies(lib2 util)
|
|
|
|
# The dependency graph computed by cmComputeTargetDepends will include
|
|
# an edge directly from 'top' to 'util'. But it should only include
|
|
# one copy of it, even though there are two paths via lib1 and lib2.
|
|
set_property(GLOBAL PROPERTY GLOBAL_DEPENDS_DEBUG_MODE 1)
|