Provided by: cmake-data_3.28.3-1build7_all bug

NAME

       cmake-packages - CMake Packages Reference

INTRODUCTION

       Packages  provide  dependency  information  to  CMake  based  buildsystems.   Packages are found with the
       find_package() command.  The result of using find_package() is either a set of IMPORTED targets, or a set
       of variables corresponding to build-relevant information.

USING PACKAGES

       CMake provides direct support for two forms of packages, Config-file Packages and  Find-module  Packages.
       Indirect  support  for  pkg-config packages is also provided via the FindPkgConfig module.  In all cases,
       the basic form of find_package() calls is the same:

          find_package(Qt4 4.7.0 REQUIRED) # CMake provides a Qt4 find-module
          find_package(Qt5Core 5.1.0 REQUIRED) # Qt provides a Qt5 package config file.
          find_package(LibXml2 REQUIRED) # Use pkg-config via the LibXml2 find-module

       In cases where it is known that a package configuration file is  provided  by  upstream,  and  only  that
       should be used, the CONFIG keyword may be passed to find_package():

          find_package(Qt5Core 5.1.0 CONFIG REQUIRED)
          find_package(Qt5Gui 5.1.0 CONFIG)

       Similarly, the MODULE keyword says to use only a find-module:

          find_package(Qt4 4.7.0 MODULE REQUIRED)

       Specifying  the  type  of  package  explicitly  improves the error message shown to the user if it is not
       found.

       Both types of packages also support specifying  components  of  a  package,  either  after  the  REQUIRED
       keyword:

          find_package(Qt5 5.1.0 CONFIG REQUIRED Widgets Xml Sql)

       or as a separate COMPONENTS list:

          find_package(Qt5 5.1.0 COMPONENTS Widgets Xml Sql)

       or as a separate OPTIONAL_COMPONENTS list:

          find_package(Qt5 5.1.0 COMPONENTS Widgets
                                 OPTIONAL_COMPONENTS Xml Sql
          )

       Handling of COMPONENTS and OPTIONAL_COMPONENTS is defined by the package.

       By  setting the CMAKE_DISABLE_FIND_PACKAGE_<PackageName> variable to TRUE, the <PackageName> package will
       not    be    searched,     and     will     always     be     NOTFOUND.     Likewise,     setting     the
       CMAKE_REQUIRE_FIND_PACKAGE_<PackageName> to TRUE will make the package REQUIRED.

   Config-file Packages
       A config-file package is a set of files provided by upstreams for downstreams to use. CMake searches in a
       number  of  locations  for package configuration files, as described in the find_package() documentation.
       The most simple way for a CMake user to tell cmake(1) to search in a non-standard prefix for a package is
       to set the CMAKE_PREFIX_PATH cache variable.

       Config-file packages are provided by upstream vendors as part of  development  packages,  that  is,  they
       belong with the header files and any other files provided to assist downstreams in using the package.

       A  set  of  variables  which  provide  package status information are also set automatically when using a
       config-file package.  The <PackageName>_FOUND variable is set to true or false, depending on whether  the
       package  was  found.   The  <PackageName>_DIR  cache  variable  is  set  to  the  location of the package
       configuration file.

   Find-module Packages
       A find module is a file with a set of rules for finding the required pieces of  a  dependency,  primarily
       header  files  and  libraries.   Typically,  a  find module is needed when the upstream is not built with
       CMake, or is not CMake-aware enough to otherwise provide a package configuration file.  Unlike a  package
       configuration  file,  it  is  not  shipped  with upstream, but is used by downstream to find the files by
       guessing locations of files with platform-specific hints.

       Unlike the case of an  upstream-provided  package  configuration  file,  no  single  point  of  reference
       identifies  the  package  as being found, so the <PackageName>_FOUND variable is not automatically set by
       the find_package() command.  It can still be expected to be set by convention however and should  be  set
       by  the  author  of  the  Find-module.  Similarly there is no <PackageName>_DIR variable, but each of the
       artifacts such as library locations and header file locations provide a separate cache variable.

       See the cmake-developer(7) manual for more information about creating Find-module files.

PACKAGE LAYOUT

       A config-file package consists of a Package Configuration File and  optionally  a  Package  Version  File
       provided with the project distribution.

   Package Configuration File
       Consider a project Foo that installs the following files:

          <prefix>/include/foo-1.2/foo.h
          <prefix>/lib/foo-1.2/libfoo.a

       It may also provide a CMake package configuration file:

          <prefix>/lib/cmake/foo-1.2/FooConfig.cmake

       with content defining IMPORTED targets, or defining variables, such as:

          # ...
          # (compute PREFIX relative to file location)
          # ...
          set(Foo_INCLUDE_DIRS ${PREFIX}/include/foo-1.2)
          set(Foo_LIBRARIES ${PREFIX}/lib/foo-1.2/libfoo.a)

       If  another  project wishes to use Foo it need only to locate the FooConfig.cmake file and load it to get
       all the information it needs about package content locations.  Since the package  configuration  file  is
       provided by the package installation it already knows all the file locations.

       The  find_package()  command  may  be  used  to  search for the package configuration file.  This command
       constructs a set of installation prefixes and searches under each prefix in several locations.  Given the
       name Foo, it looks for a file called FooConfig.cmake or foo-config.cmake.  The full set of  locations  is
       specified in the find_package() command documentation. One place it looks is:

          <prefix>/lib/cmake/Foo*/

       where  Foo* is a case-insensitive globbing expression.  In our example the globbing expression will match
       <prefix>/lib/cmake/foo-1.2 and the package configuration file will be found.

       Once found, a package configuration file is immediately loaded.  It,  together  with  a  package  version
       file, contains all the information the project needs to use the package.

   Package Version File
       When  the  find_package()  command finds a candidate package configuration file it looks next to it for a
       version file. The version file is loaded to test whether the package version is an acceptable  match  for
       the  version  requested.   If  the  version file claims compatibility the configuration file is accepted.
       Otherwise it is ignored.

       The name of the package version file must match that of the package configuration  file  but  has  either
       -version or Version appended to the name before the .cmake extension.  For example, the files:

          <prefix>/lib/cmake/foo-1.3/foo-config.cmake
          <prefix>/lib/cmake/foo-1.3/foo-config-version.cmake

       and:

          <prefix>/lib/cmake/bar-4.2/BarConfig.cmake
          <prefix>/lib/cmake/bar-4.2/BarConfigVersion.cmake

       are each pairs of package configuration files and corresponding package version files.

       When the find_package() command loads a version file it first sets the following variables:

       PACKAGE_FIND_NAME
              The <PackageName>

       PACKAGE_FIND_VERSION
              Full requested version string

       PACKAGE_FIND_VERSION_MAJOR
              Major version if requested, else 0

       PACKAGE_FIND_VERSION_MINOR
              Minor version if requested, else 0

       PACKAGE_FIND_VERSION_PATCH
              Patch version if requested, else 0

       PACKAGE_FIND_VERSION_TWEAK
              Tweak version if requested, else 0

       PACKAGE_FIND_VERSION_COUNT
              Number of version components, 0 to 4

       The  version  file  must  use these variables to check whether it is compatible or an exact match for the
       requested version and set the following variables with results:

       PACKAGE_VERSION
              Full provided version string

       PACKAGE_VERSION_EXACT
              True if version is exact match

       PACKAGE_VERSION_COMPATIBLE
              True if version is compatible

       PACKAGE_VERSION_UNSUITABLE
              True if unsuitable as any version

       Version files are loaded in a nested scope so they are free to set any variables they  wish  as  part  of
       their  computation.  The find_package command wipes out the scope when the version file has completed and
       it has checked the output variables. When the version file claims to  be  an  acceptable  match  for  the
       requested version the find_package command sets the following variables for use by the project:

       <PackageName>_VERSION
              Full provided version string

       <PackageName>_VERSION_MAJOR
              Major version if provided, else 0

       <PackageName>_VERSION_MINOR
              Minor version if provided, else 0

       <PackageName>_VERSION_PATCH
              Patch version if provided, else 0

       <PackageName>_VERSION_TWEAK
              Tweak version if provided, else 0

       <PackageName>_VERSION_COUNT
              Number of version components, 0 to 4

       The variables report the version of the package that was actually found.  The <PackageName> part of their
       name matches the argument given to the find_package() command.

CREATING PACKAGES

       Usually,  the upstream depends on CMake itself and can use some CMake facilities for creating the package
       files. Consider an upstream which provides a single shared library:

          project(UpstreamLib)

          set(CMAKE_INCLUDE_CURRENT_DIR ON)
          set(CMAKE_INCLUDE_CURRENT_DIR_IN_INTERFACE ON)

          set(Upstream_VERSION 3.4.1)

          include(GenerateExportHeader)

          add_library(ClimbingStats SHARED climbingstats.cpp)
          generate_export_header(ClimbingStats)
          set_property(TARGET ClimbingStats PROPERTY VERSION ${Upstream_VERSION})
          set_property(TARGET ClimbingStats PROPERTY SOVERSION 3)
          set_property(TARGET ClimbingStats PROPERTY
            INTERFACE_ClimbingStats_MAJOR_VERSION 3)
          set_property(TARGET ClimbingStats APPEND PROPERTY
            COMPATIBLE_INTERFACE_STRING ClimbingStats_MAJOR_VERSION
          )

          install(TARGETS ClimbingStats EXPORT ClimbingStatsTargets
            LIBRARY DESTINATION lib
            ARCHIVE DESTINATION lib
            RUNTIME DESTINATION bin
            INCLUDES DESTINATION include
          )
          install(
            FILES
              climbingstats.h
              "${CMAKE_CURRENT_BINARY_DIR}/climbingstats_export.h"
            DESTINATION
              include
            COMPONENT
              Devel
          )

          include(CMakePackageConfigHelpers)
          write_basic_package_version_file(
            "${CMAKE_CURRENT_BINARY_DIR}/ClimbingStats/ClimbingStatsConfigVersion.cmake"
            VERSION ${Upstream_VERSION}
            COMPATIBILITY AnyNewerVersion
          )

          export(EXPORT ClimbingStatsTargets
            FILE "${CMAKE_CURRENT_BINARY_DIR}/ClimbingStats/ClimbingStatsTargets.cmake"
            NAMESPACE Upstream::
          )
          configure_file(cmake/ClimbingStatsConfig.cmake
            "${CMAKE_CURRENT_BINARY_DIR}/ClimbingStats/ClimbingStatsConfig.cmake"
            COPYONLY
          )

          set(ConfigPackageLocation lib/cmake/ClimbingStats)
          install(EXPORT ClimbingStatsTargets
            FILE
              ClimbingStatsTargets.cmake
            NAMESPACE
              Upstream::
            DESTINATION
              ${ConfigPackageLocation}
          )
          install(
            FILES
              cmake/ClimbingStatsConfig.cmake
              "${CMAKE_CURRENT_BINARY_DIR}/ClimbingStats/ClimbingStatsConfigVersion.cmake"
            DESTINATION
              ${ConfigPackageLocation}
            COMPONENT
              Devel
          )

       The CMakePackageConfigHelpers module provides a macro for creating  a  simple  ConfigVersion.cmake  file.
       This  file  sets  the  version  of  the  package.   It  is read by CMake when find_package() is called to
       determine the compatibility with the requested  version,  and  to  set  some  version-specific  variables
       <PackageName>_VERSION, <PackageName>_VERSION_MAJOR, <PackageName>_VERSION_MINOR etc.  The install(EXPORT)
       command  is  used to export the targets in the ClimbingStatsTargets export-set, defined previously by the
       install(TARGETS) command. This command generates the ClimbingStatsTargets.cmake file to contain  IMPORTED
       targets,  suitable  for  use  by  downstreams and arranges to install it to lib/cmake/ClimbingStats.  The
       generated ClimbingStatsConfigVersion.cmake and a cmake/ClimbingStatsConfig.cmake  are  installed  to  the
       same location, completing the package.

       The  generated  IMPORTED targets have appropriate properties set to define their usage requirements, such
       as INTERFACE_INCLUDE_DIRECTORIES, INTERFACE_COMPILE_DEFINITIONS and other  relevant  built-in  INTERFACE_
       properties.   The  INTERFACE variant of user-defined properties listed in COMPATIBLE_INTERFACE_STRING and
       other Compatible Interface Properties are also propagated to the  generated  IMPORTED  targets.   In  the
       above  case,  ClimbingStats_MAJOR_VERSION  is  defined  as  a  string  which must be compatible among the
       dependencies of any depender.  By setting this custom defined user property in this version  and  in  the
       next  version  of ClimbingStats, cmake(1) will issue a diagnostic if there is an attempt to use version 3
       together with version 4.  Packages can choose to employ such a pattern if different major versions of the
       package are designed to be incompatible.

       A NAMESPACE with double-colons is specified when exporting the targets for installation.  This convention
       of double-colons gives CMake a hint that the name is an IMPORTED target when it is  used  by  downstreams
       with  the  target_link_libraries()  command.   This  way,  CMake  can  issue  a diagnostic if the package
       providing it has not yet been found.

       In this case, when using install(TARGETS) the  INCLUDES  DESTINATION  was  specified.   This  causes  the
       IMPORTED  targets to have their INTERFACE_INCLUDE_DIRECTORIES populated with the include directory in the
       CMAKE_INSTALL_PREFIX.  When the IMPORTED target is used by  downstream,  it  automatically  consumes  the
       entries from that property.

   Creating a Package Configuration File
       In this case, the ClimbingStatsConfig.cmake file could be as simple as:

          include("${CMAKE_CURRENT_LIST_DIR}/ClimbingStatsTargets.cmake")

       As  this  allows  downstreams  to  use  the  IMPORTED  targets.   If any macros should be provided by the
       ClimbingStats package, they should be in a separate file which is installed to the same location  as  the
       ClimbingStatsConfig.cmake file, and included from there.

       This can also be extended to cover dependencies:

          # ...
          add_library(ClimbingStats SHARED climbingstats.cpp)
          generate_export_header(ClimbingStats)

          find_package(Stats 2.6.4 REQUIRED)
          target_link_libraries(ClimbingStats PUBLIC Stats::Types)

       As  the Stats::Types target is a PUBLIC dependency of ClimbingStats, downstreams must also find the Stats
       package  and  link  to  the  Stats::Types  library.   The  Stats  package  should   be   found   in   the
       ClimbingStatsConfig.cmake    file    to    ensure    this.     The   find_dependency   macro   from   the
       CMakeFindDependencyMacro helps with this by propagating whether the package is REQUIRED,  or  QUIET  etc.
       All REQUIRED dependencies of a package should be found in the Config.cmake file:

          include(CMakeFindDependencyMacro)
          find_dependency(Stats 2.6.4)

          include("${CMAKE_CURRENT_LIST_DIR}/ClimbingStatsTargets.cmake")
          include("${CMAKE_CURRENT_LIST_DIR}/ClimbingStatsMacros.cmake")

       The  find_dependency  macro  also sets ClimbingStats_FOUND to False if the dependency is not found, along
       with a diagnostic that the ClimbingStats package can not be used without the Stats package.

       If  COMPONENTS  are  specified  when  the  downstream  uses  find_package(),  they  are  listed  in   the
       <PackageName>_FIND_COMPONENTS   variable.   If   a   particular   component  is  non-optional,  then  the
       <PackageName>_FIND_REQUIRED_<comp>  will  be  true.  This  can  be  tested  with  logic  in  the  package
       configuration file:

          include(CMakeFindDependencyMacro)
          find_dependency(Stats 2.6.4)

          include("${CMAKE_CURRENT_LIST_DIR}/ClimbingStatsTargets.cmake")
          include("${CMAKE_CURRENT_LIST_DIR}/ClimbingStatsMacros.cmake")

          set(_ClimbingStats_supported_components Plot Table)

          foreach(_comp ${ClimbingStats_FIND_COMPONENTS})
            if (NOT ";${_ClimbingStats_supported_components};" MATCHES ";${_comp};")
              set(ClimbingStats_FOUND False)
              set(ClimbingStats_NOT_FOUND_MESSAGE "Unsupported component: ${_comp}")
            endif()
            include("${CMAKE_CURRENT_LIST_DIR}/ClimbingStats${_comp}Targets.cmake")
          endforeach()

       Here,  the  ClimbingStats_NOT_FOUND_MESSAGE  is  set  to  a diagnosis that the package could not be found
       because an invalid component was specified.  This message variable can be set  for  any  case  where  the
       _FOUND variable is set to False, and will be displayed to the user.

   Creating a Package Configuration File for the Build Tree
       The  export(EXPORT)  command  creates  an  IMPORTED  targets  definition  file  which  is specific to the
       build-tree, and is not relocatable.  This can similarly be used with  a  suitable  package  configuration
       file  and  package  version  file  to  define  a  package  for  the  build tree which may be used without
       installation.  Consumers of the build tree can simply ensure  that  the  CMAKE_PREFIX_PATH  contains  the
       build directory, or set the ClimbingStats_DIR to <build_dir>/ClimbingStats in the cache.

   Creating Relocatable Packages
       A  relocatable  package  must  not  reference absolute paths of files on the machine where the package is
       built that will not exist on the machines where the package may be installed.

       Packages created by install(EXPORT) are designed to be relocatable, using paths relative to the  location
       of the package itself.  When defining the interface of a target for EXPORT, keep in mind that the include
       directories should be specified as relative paths which are relative to the CMAKE_INSTALL_PREFIX:

          target_include_directories(tgt INTERFACE
            # Wrong, not relocatable:
            $<INSTALL_INTERFACE:${CMAKE_INSTALL_PREFIX}/include/TgtName>
          )

          target_include_directories(tgt INTERFACE
            # Ok, relocatable:
            $<INSTALL_INTERFACE:include/TgtName>
          )

       The  $<INSTALL_PREFIX>  generator  expression may be used as a placeholder for the install prefix without
       resulting in a non-relocatable package.  This is necessary if complex generator expressions are used:

          target_include_directories(tgt INTERFACE
            # Ok, relocatable:
            $<INSTALL_INTERFACE:$<$<CONFIG:Debug>:$<INSTALL_PREFIX>/include/TgtName>>
          )

       This also applies to paths referencing external dependencies.   It  is  not  advisable  to  populate  any
       properties  which  may contain paths, such as INTERFACE_INCLUDE_DIRECTORIES and INTERFACE_LINK_LIBRARIES,
       with paths relevant to dependencies.  For example, this code may not work well for a relocatable package:

          target_link_libraries(ClimbingStats INTERFACE
            ${Foo_LIBRARIES} ${Bar_LIBRARIES}
            )
          target_include_directories(ClimbingStats INTERFACE
            "$<INSTALL_INTERFACE:${Foo_INCLUDE_DIRS};${Bar_INCLUDE_DIRS}>"
            )

       The referenced variables may contain the absolute paths to libraries and include directories as found  on
       the  machine  the package was made on.  This would create a package with hard-coded paths to dependencies
       and not suitable for relocation.

       Ideally such dependencies should be  used  through  their  own  IMPORTED  targets  that  have  their  own
       IMPORTED_LOCATION  and  usage  requirement  properties  such  as  INTERFACE_INCLUDE_DIRECTORIES populated
       appropriately.  Those imported targets may then be used  with  the  target_link_libraries()  command  for
       ClimbingStats:

          target_link_libraries(ClimbingStats INTERFACE Foo::Foo Bar::Bar)

       With  this  approach  the package references its external dependencies only through the names of IMPORTED
       targets.   When  a  consumer  uses  the  installed  package,  the  consumer  will  run  the   appropriate
       find_package()  commands  (via  the  find_dependency  macro described above) to find the dependencies and
       populate the imported targets with appropriate paths on their own machine.

       Unfortunately many modules shipped  with  CMake  do  not  yet  provide  IMPORTED  targets  because  their
       development  pre-dated  this  approach.  This may improve incrementally over time.  Workarounds to create
       relocatable packages using such modules include:

       • When building the package,  specify  each  Foo_LIBRARY  cache  entry  as  just  a  library  name,  e.g.
         -DFoo_LIBRARY=foo.   This  tells  the corresponding find module to populate the Foo_LIBRARIES with just
         foo to ask the linker to search for the library instead of hard-coding a path.

       • Or, after installing the package content but  before  creating  the  package  installation  binary  for
         redistribution,  manually  replace  the  absolute  paths  with  placeholders  for  substitution  by the
         installation tool when the package is installed.

PACKAGE REGISTRY

       CMake provides two central locations to register packages that have been built or installed anywhere on a
       system:

       • User Package RegistrySystem Package Registry

       The registries are especially useful to help projects find packages in non-standard install locations  or
       directly  in their own build trees.  A project may populate either the user or system registry (using its
       own means, see below) to refer to its  location.   In  either  case  the  package  should  store  at  the
       registered  location  a  Package  Configuration File (<PackageName>Config.cmake) and optionally a Package
       Version File (<PackageName>ConfigVersion.cmake).

       The find_package() command searches the two package registries as two of the search  steps  specified  in
       its  documentation.  If it has sufficient permissions it also removes stale package registry entries that
       refer to directories that do not exist or do not contain a matching package configuration file.

   User Package Registry
       The User Package Registry is stored in a per-user location.  The export(PACKAGE) command may be  used  to
       register a project build tree in the user package registry.  CMake currently provides no interface to add
       install  trees  to  the  user  package  registry.   Installers  must be manually taught to register their
       packages if desired.

       On Windows the user package registry is stored in the Windows registry under a key in HKEY_CURRENT_USER.

       A <PackageName> may appear under registry key:

          HKEY_CURRENT_USER\Software\Kitware\CMake\Packages\<PackageName>

       as a REG_SZ value, with arbitrary name, that specifies the directory containing the package configuration
       file.

       On UNIX platforms the user package registry is stored in the user home directory under ~/.cmake/packages.
       A <PackageName> may appear under the directory:

          ~/.cmake/packages/<PackageName>

       as  a  file,  with  arbitrary  name,  whose  content  specifies  the  directory  containing  the  package
       configuration file.

   System Package Registry
       The  System  Package Registry is stored in a system-wide location.  CMake currently provides no interface
       to add to the system package registry.  Installers must be manually taught to register their packages  if
       desired.

       On   Windows   the   system  package  registry  is  stored  in  the  Windows  registry  under  a  key  in
       HKEY_LOCAL_MACHINE.  A <PackageName> may appear under registry key:

          HKEY_LOCAL_MACHINE\Software\Kitware\CMake\Packages\<PackageName>

       as a REG_SZ value, with arbitrary name, that specifies the directory containing the package configuration
       file.

       There is no system package registry on non-Windows platforms.

   Disabling the Package Registry
       In some cases using the Package Registries is not desirable. CMake allows one to disable them  using  the
       following variables:

       • The  export(PACKAGE)  command  does  not  populate the user package registry when CMP0090 is set to NEW
         unless the CMAKE_EXPORT_PACKAGE_REGISTRY variable explicitly enables it.  When CMP0090 is  not  set  to
         NEW     then     export(PACKAGE)     populates     the     user    package    registry    unless    the
         CMAKE_EXPORT_NO_PACKAGE_REGISTRY variable explicitly disables it.

       • CMAKE_FIND_USE_PACKAGE_REGISTRY disables the User Package Registry in all the find_package() calls when
         set to FALSE.

       • Deprecated CMAKE_FIND_PACKAGE_NO_PACKAGE_REGISTRY  disables  the  User  Package  Registry  in  all  the
         find_package()  calls  when  set to TRUE. This variable is ignored when CMAKE_FIND_USE_PACKAGE_REGISTRY
         has been set.

       • CMAKE_FIND_PACKAGE_NO_SYSTEM_PACKAGE_REGISTRY  disables  the  System  Package  Registry  in   all   the
         find_package() calls.

   Package Registry Example
       A simple convention for naming package registry entries is to use content hashes.  They are deterministic
       and  unlikely  to  collide  (export(PACKAGE)  uses  this  approach).   The name of an entry referencing a
       specific directory is simply the content hash of the directory path itself.

       If a project arranges for package registry entries to exist, such as:

          > reg query HKCU\Software\Kitware\CMake\Packages\MyPackage
          HKEY_CURRENT_USER\Software\Kitware\CMake\Packages\MyPackage
           45e7d55f13b87179bb12f907c8de6fc4 REG_SZ c:/Users/Me/Work/lib/cmake/MyPackage
           7b4a9844f681c80ce93190d4e3185db9 REG_SZ c:/Users/Me/Work/MyPackage-build

       or:

          $ cat ~/.cmake/packages/MyPackage/7d1fb77e07ce59a81bed093bbee945bd
          /home/me/work/lib/cmake/MyPackage
          $ cat ~/.cmake/packages/MyPackage/f92c1db873a1937f3100706657c63e07
          /home/me/work/MyPackage-build

       then the CMakeLists.txt code:

          find_package(MyPackage)

       will search the registered locations for package configuration files (MyPackageConfig.cmake).  The search
       order among package registry entries for a single package is unspecified and the entry names  (hashes  in
       this   example)   have   no   meaning.    Registered   locations   may   contain  package  version  files
       (MyPackageConfigVersion.cmake) to tell find_package() whether a specific location  is  suitable  for  the
       version requested.

   Package Registry Ownership
       Package  registry  entries  are  individually  owned by the project installations that they reference.  A
       package installer is  responsible  for  adding  its  own  entry  and  the  corresponding  uninstaller  is
       responsible for removing it.

       The  export(PACKAGE)  command  populates  the  user package registry with the location of a project build
       tree.  Build trees tend to be deleted by developers and have no  "uninstall"  event  that  could  trigger
       removal of their entries.  In order to keep the registries clean the find_package() command automatically
       removes  stale  entries  it  encounters if it has sufficient permissions.  CMake provides no interface to
       remove an entry referencing an existing build tree once export(PACKAGE) has been  invoked.   However,  if
       the  project  removes  its  package configuration file from the build tree then the entry referencing the
       location will be considered stale.

COPYRIGHT

       2000-2024 Kitware, Inc. and Contributors

3.28.3                                           April 15, 2024                                CMAKE-PACKAGES(7)