Capturing runtime dependencies is currently not fully possible
Using the INTERFACE_LINK_LIBRARIES property it is possible to retrieve the public library dependencies of a target and with the IMPORTED_LOCATION property it is possible to retrieve the DLL or shared library belonging to a target.
That is great, because using these two properties together makes it possible to retrieve the transitive runtime dependencies of a target and get a full list of shared libraries used by the target. There is a snag however, because it is only fully possible if all INTERFACE_LINK_LIBRARIES are specified as either PUBLIC or INTERFACE in target_link_libraries (otherwise they would not appear in the INTERFACE_LINK_LIBRARIES property).
It is therefore impossible to retrieve the full list of runtime dependencies of, for instance, a SHARED target that privately links with another SHARED target.
An example of this with VTK:
vtkIOImage specifies a PRIVATE link dependency on vtkpng. Which is correct, because targets linking with vtkIOImage should not have to link with vtkpng (i.e. vtkpng should not be part of the link interface for vtkIOImage). However, targets that have linked with vtkIOImage do in fact have a runtime dependency on vtkpng through vtkIOImage (i.e. without vtkpng.dll your application won't run). This runtime dependency is currently not captured by CMake without resorting to using custom properties.
It would be worthwhile to have a property available in CMake that allows retrieving runtime dependencies of targets. For instance, something that might work is to have a property called INTERFACE_RUNTIME_LIBRARIES, that list all runtime dependencies of that target. A runtime dependency could be set in target_link_libraries by having an additional RUNTIME argument that indicates whether the target depends on the library during runtime. PUBLIC dependencies are of course automatically made into runtime dependencies.
For the VTK example this would mean that vtkIOImage has a PRIVATE dependency on vtkpng, but it would set the RUNTIME argument in target_link_libraries because other targets linking with vtkIOImage do get a runtime (but not a link) dependency on vtkpng through vtkIOImage.