Intended way to interface with external targets(?)

I have a project with a similar structure

├── external
│   ├── ext
│   ├── glew
│   └── opencv
└── src

And I’ve never felt like I correctly integrate CMake projects from my external directory with my source. I usually end up creating a separate project in the root of external that compiles everything with every possible variant. But this becomes troublesome and hard to maintain when I want to support multi configuration platforms and configurations for BUILD_SHARED_LIBS being both ON and OFF. This is also troublesome because most of my projects are cross platform. I don’t quite understand the use of ExternalProject, I’ve read that you can refer to the targets with that external project(?). I know you can do this roughly through add_subdirectory but comes with namespace issues. Ideally, I want to point my project at another CMake project and depend on the targets defined within it and not have to worry about clashing target names or rebuilding the entire world when I want to run clean builds of my own code. I feel like for how powerful CMake is there has to be something I’m just missing. Does anyone have any suggestions/tips?

Shameless self bump