[cmake-developers] Making Config.cmake files easier to write

Brad King brad.king at kitware.com
Mon Feb 13 17:22:04 EST 2012


On 2/13/2012 4:52 PM, Alexander Neundorf wrote:
> we are hoping that more and more libraries will install Config.cmake files
> (and for kdelibs this is actually happening right now), so we should make sure
> it is straighforward to create proper Config.cmake files.

This is a worthwhile goal, but I do not like the approach proposed:

(1) It makes BarConfig.cmake depend on a file not distributed with it.

(2) The content of a relocatable BarConfig.cmake should not depend on where
it happened to be installed when the package was built.

I'd rather see an approach that processes paths during configuration
of the original package.  Provide some helper macros that can configure
BarConfig.cmake with the proper code in it to compute paths relative
to its location:

  include(CMakePackageConfigHelper)
  cmake_package_config_for_install(Bar
    DESTINATION lib/cmake/Bar # install destination
    # INPUT BarConfig-install.cmake.in # alternate input
    )

This would look for "BarConfig.cmake.in" (or whatever INPUT says) and
do configure_file along with install(FILES).  The module can document
some standard @CONFIG@ variables that can be used inside the input
file to get various paths:

  $ cat BarConfig.cmake.in
  @PACKAGE_INIT@
  set(BAR_INCLUDE_DIRS "@PACKAGE_PREFIX@/include/bar")
  ...

The @PACKAGE_INIT@ would be replaced by code to compute the install
prefix using knowledge the of the install DESTINATION of the config
file and store it in an unspecified variable (say Bar_PREFIX) that
is referenced by @PACKAGE_PREFIX@, which is replaced by ${Bar_PREFIX}.

-Brad



More information about the cmake-developers mailing list