Writing a FindXXX.cmake module that works with shared libraries is
relatively easy. You need only find the interface libraries and the
system will take care of resolving dependencies when the executable is
run. With static libraries, the linker must be provided with the entire
dependency graph. Determining the dependency graph is project-specific,
but common methods are wrapper compilers, Makefile systems, and
pkg-config. All of these provide a link line which includes all
dependencies. However, CMake does not accept link lines directly. A hack
is for the CMake module to parse the link line itself. To be truly
portable, the semantics of the underlying linker must be preserved.
Normally this means that each library pathh is added to a stack and each
library is searched in this stack and then in system directories. Every
module distributed with CMake that attempts to parse link lines gets
this wrong as of 2.6.3rc1 when multiple
versions of libraries are present.
Most FindXXX modules make no attempt to resolve dependencies, hence
require manual intervention when shared libraries are not available.