CMake/Tutorials/Package Registry: Difference between revisions

From KitwarePublic
Jump to navigationJump to search
No edit summary
(Replace content with link to new CMake community wiki)
 
(8 intermediate revisions by one other user not shown)
Line 1: Line 1:
==Introduction==
{{CMake/Template/Moved}}


CMake provides two central locations to register packages that have been built or installed anywhere on a system:
This page has moved [https://gitlab.kitware.com/cmake/community/wikis/doc/tutorials/Package-Registry here].
 
* [[#User|User Package Registry]]
* [[#System|System Package Registry]]
 
The registries are especially useful to help project find packages in non-standard install locations or directly in their own build trees.
A project may use the <code>export(PACKAGE)</code> command to register its build tree in the ''user'' package registry.
A package installer may populate either the user or system registry (using its own means) to refer to the installed package location.
In either case the package should store at the registered location a [[CMake/Tutorials/Packaging#Package_Configuration_Files|package configuration file]] (<code><package>Config.cmake</code>) and optionally a [[CMake/Tutorials/Packaging#Package_Version_Files|package version file]] (<code><package>ConfigVersion.cmake</code>).
 
The <code>find_package</code> command searches the package registries as 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==
 
The ''User Package Registry'' is stored in a per-user location.
 
On Windows the user package registry is stored in the Windows registry under a key in <code>HKEY_CURRENT_USER</code>.
A <code><package></code> may appear under registry key
 
  HKEY_CURRENT_USER\Software\Kitware\CMake\Packages\<package>
 
as a <code>REG_SZ</code> 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 <code>~/.cmake/packages</code>.
A <code><package></code> may appear under the directory
 
  ~/.cmake/packages/<package>
 
as a file, with arbitrary name, whose content specifies the directory containing the package configuration file.
 
==System==
 
The ''System Package Registry'' is stored in a system-wide location.
 
On Windows the system package registry is stored in the Windows registry under a key in <code>HKEY_LOCAL_MACHINE</code>.
A <code><package></code> may appear under registry key
 
  HKEY_LOCAL_MACHINE\Software\Kitware\CMake\Packages\<package>
 
as a <code>REG_SZ</code> value, with arbitrary name, that specifies the directory containing the package configuration file.
 
There is no system package registry on non-Windows platforms.
 
==Example==
 
A simple convention for naming package registry entries is to use content hashes.
They are deterministic and unlikely to collide (<code>export(PACKAGE)</code> uses this approach).
 
If a project arranges for a package registry entry 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
 
or
 
$ cat ~/.cmake/packages/MyPackage/7d1fb77e07ce59a81bed093bbee945bd
/home/me/work/lib/cmake/MyPackage
 
then the <code>CMakeLists.txt</code> code
 
find_package(MyPackage)
 
will search the registered location.

Latest revision as of 15:40, 30 April 2018


The CMake community Wiki has moved to the Kitware GitLab Instance.

This page has moved here.