| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362 |
- find_package
- ------------
- Load settings for an external project.
- ::
- find_package(<package> [version] [EXACT] [QUIET] [MODULE]
- [REQUIRED] [[COMPONENTS] [components...]]
- [OPTIONAL_COMPONENTS components...]
- [NO_POLICY_SCOPE])
- Finds and loads settings from an external project. <package>_FOUND
- will be set to indicate whether the package was found. When the
- package is found package-specific information is provided through
- variables and imported targets documented by the package itself. The
- QUIET option disables messages if the package cannot be found. The
- MODULE option disables the second signature documented below. The
- REQUIRED option stops processing with an error message if the package
- cannot be found.
- A package-specific list of required components may be listed after the
- COMPONENTS option (or after the REQUIRED option if present).
- Additional optional components may be listed after
- OPTIONAL_COMPONENTS. Available components and their influence on
- whether a package is considered to be found are defined by the target
- package.
- The [version] argument requests a version with which the package found
- should be compatible (format is major[.minor[.patch[.tweak]]]). The
- EXACT option requests that the version be matched exactly. If no
- [version] and/or component list is given to a recursive invocation
- inside a find-module, the corresponding arguments are forwarded
- automatically from the outer call (including the EXACT flag for
- [version]). Version support is currently provided only on a
- package-by-package basis (details below).
- User code should generally look for packages using the above simple
- signature. The remainder of this command documentation specifies the
- full command signature and details of the search process. Project
- maintainers wishing to provide a package to be found by this command
- are encouraged to read on.
- The command has two modes by which it searches for packages: "Module"
- mode and "Config" mode. Module mode is available when the command is
- invoked with the above reduced signature. CMake searches for a file
- called "Find<package>.cmake" in the CMAKE_MODULE_PATH followed by the
- CMake installation. If the file is found, it is read and processed by
- CMake. It is responsible for finding the package, checking the
- version, and producing any needed messages. Many find-modules provide
- limited or no support for versioning; check the module documentation.
- If no module is found and the MODULE option is not given the command
- proceeds to Config mode.
- The complete Config mode command signature is:
- ::
- find_package(<package> [version] [EXACT] [QUIET]
- [REQUIRED] [[COMPONENTS] [components...]]
- [CONFIG|NO_MODULE]
- [NO_POLICY_SCOPE]
- [NAMES name1 [name2 ...]]
- [CONFIGS config1 [config2 ...]]
- [HINTS path1 [path2 ... ]]
- [PATHS path1 [path2 ... ]]
- [PATH_SUFFIXES suffix1 [suffix2 ...]]
- [NO_DEFAULT_PATH]
- [NO_CMAKE_ENVIRONMENT_PATH]
- [NO_CMAKE_PATH]
- [NO_SYSTEM_ENVIRONMENT_PATH]
- [NO_CMAKE_PACKAGE_REGISTRY]
- [NO_CMAKE_BUILDS_PATH]
- [NO_CMAKE_SYSTEM_PATH]
- [NO_CMAKE_SYSTEM_PACKAGE_REGISTRY]
- [CMAKE_FIND_ROOT_PATH_BOTH |
- ONLY_CMAKE_FIND_ROOT_PATH |
- NO_CMAKE_FIND_ROOT_PATH])
- The CONFIG option may be used to skip Module mode explicitly and
- switch to Config mode. It is synonymous to using NO_MODULE. Config
- mode is also implied by use of options not specified in the reduced
- signature.
- Config mode attempts to locate a configuration file provided by the
- package to be found. A cache entry called <package>_DIR is created to
- hold the directory containing the file. By default the command
- searches for a package with the name <package>. If the NAMES option
- is given the names following it are used instead of <package>. The
- command searches for a file called "<name>Config.cmake" or
- "<lower-case-name>-config.cmake" for each name specified. A
- replacement set of possible configuration file names may be given
- using the CONFIGS option. The search procedure is specified below.
- Once found, the configuration file is read and processed by CMake.
- Since the file is provided by the package it already knows the
- location of package contents. The full path to the configuration file
- is stored in the cmake variable <package>_CONFIG.
- All configuration files which have been considered by CMake while
- searching for an installation of the package with an appropriate
- version are stored in the cmake variable <package>_CONSIDERED_CONFIGS,
- the associated versions in <package>_CONSIDERED_VERSIONS.
- If the package configuration file cannot be found CMake will generate
- an error describing the problem unless the QUIET argument is
- specified. If REQUIRED is specified and the package is not found a
- fatal error is generated and the configure step stops executing. If
- <package>_DIR has been set to a directory not containing a
- configuration file CMake will ignore it and search from scratch.
- When the [version] argument is given Config mode will only find a
- version of the package that claims compatibility with the requested
- version (format is major[.minor[.patch[.tweak]]]). If the EXACT
- option is given only a version of the package claiming an exact match
- of the requested version may be found. CMake does not establish any
- convention for the meaning of version numbers. Package version
- numbers are checked by "version" files provided by the packages
- themselves. For a candidate package configuration file
- "<config-file>.cmake" the corresponding version file is located next
- to it and named either "<config-file>-version.cmake" or
- "<config-file>Version.cmake". If no such version file is available
- then the configuration file is assumed to not be compatible with any
- requested version. A basic version file containing generic version
- matching code can be created using the macro
- write_basic_package_version_file(), see its documentation for more
- details. When a version file is found it is loaded to check the
- requested version number. The version file is loaded in a nested
- scope in which the following variables have been defined:
- ::
- PACKAGE_FIND_NAME = the <package> name
- 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 checks whether it satisfies the requested version and
- sets these variables:
- ::
- 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
- These variables are checked by the find_package command to determine
- whether the configuration file provides an acceptable version. They
- are not available after the find_package call returns. If the version
- is acceptable the following variables are set:
- ::
- <package>_VERSION = full provided version string
- <package>_VERSION_MAJOR = major version if provided, else 0
- <package>_VERSION_MINOR = minor version if provided, else 0
- <package>_VERSION_PATCH = patch version if provided, else 0
- <package>_VERSION_TWEAK = tweak version if provided, else 0
- <package>_VERSION_COUNT = number of version components, 0 to 4
- and the corresponding package configuration file is loaded. When
- multiple package configuration files are available whose version files
- claim compatibility with the version requested it is unspecified which
- one is chosen. No attempt is made to choose a highest or closest
- version number.
- Config mode provides an elaborate interface and search procedure.
- Much of the interface is provided for completeness and for use
- internally by find-modules loaded by Module mode. Most user code
- should simply call
- ::
- find_package(<package> [major[.minor]] [EXACT] [REQUIRED|QUIET])
- in order to find a package. Package maintainers providing CMake
- package configuration files are encouraged to name and install them
- such that the procedure outlined below will find them without
- requiring use of additional options.
- CMake constructs a set of possible installation prefixes for the
- package. Under each prefix several directories are searched for a
- configuration file. The tables below show the directories searched.
- Each entry is meant for installation trees following Windows (W), UNIX
- (U), or Apple (A) conventions.
- ::
- <prefix>/ (W)
- <prefix>/(cmake|CMake)/ (W)
- <prefix>/<name>*/ (W)
- <prefix>/<name>*/(cmake|CMake)/ (W)
- <prefix>/(lib/<arch>|lib|share)/cmake/<name>*/ (U)
- <prefix>/(lib/<arch>|lib|share)/<name>*/ (U)
- <prefix>/(lib/<arch>|lib|share)/<name>*/(cmake|CMake)/ (U)
- On systems supporting OS X Frameworks and Application Bundles the
- following directories are searched for frameworks or bundles
- containing a configuration file:
- ::
- <prefix>/<name>.framework/Resources/ (A)
- <prefix>/<name>.framework/Resources/CMake/ (A)
- <prefix>/<name>.framework/Versions/*/Resources/ (A)
- <prefix>/<name>.framework/Versions/*/Resources/CMake/ (A)
- <prefix>/<name>.app/Contents/Resources/ (A)
- <prefix>/<name>.app/Contents/Resources/CMake/ (A)
- In all cases the <name> is treated as case-insensitive and corresponds
- to any of the names specified (<package> or names given by NAMES).
- Paths with lib/<arch> are enabled if CMAKE_LIBRARY_ARCHITECTURE is
- set. If PATH_SUFFIXES is specified the suffixes are appended to each
- (W) or (U) directory entry one-by-one.
- This set of directories is intended to work in cooperation with
- projects that provide configuration files in their installation trees.
- Directories above marked with (W) are intended for installations on
- Windows where the prefix may point at the top of an application's
- installation directory. Those marked with (U) are intended for
- installations on UNIX platforms where the prefix is shared by multiple
- packages. This is merely a convention, so all (W) and (U) directories
- are still searched on all platforms. Directories marked with (A) are
- intended for installations on Apple platforms. The cmake variables
- CMAKE_FIND_FRAMEWORK and CMAKE_FIND_APPBUNDLE determine the order of
- preference as specified below.
- The set of installation prefixes is constructed using the following
- steps. If NO_DEFAULT_PATH is specified all NO_* options are enabled.
- 1. Search paths specified in cmake-specific cache variables. These
- are intended to be used on the command line with a -DVAR=value. This
- can be skipped if NO_CMAKE_PATH is passed.
- ::
- CMAKE_PREFIX_PATH
- CMAKE_FRAMEWORK_PATH
- CMAKE_APPBUNDLE_PATH
- 2. Search paths specified in cmake-specific environment variables.
- These are intended to be set in the user's shell configuration. This
- can be skipped if NO_CMAKE_ENVIRONMENT_PATH is passed.
- ::
- <package>_DIR
- CMAKE_PREFIX_PATH
- CMAKE_FRAMEWORK_PATH
- CMAKE_APPBUNDLE_PATH
- 3. Search paths specified by the HINTS option. These should be paths
- computed by system introspection, such as a hint provided by the
- location of another item already found. Hard-coded guesses should be
- specified with the PATHS option.
- 4. Search the standard system environment variables. This can be
- skipped if NO_SYSTEM_ENVIRONMENT_PATH is passed. Path entries ending
- in "/bin" or "/sbin" are automatically converted to their parent
- directories.
- ::
- PATH
- 5. Search project build trees recently configured in a CMake GUI.
- This can be skipped if NO_CMAKE_BUILDS_PATH is passed. It is intended
- for the case when a user is building multiple dependent projects one
- after another.
- 6. Search paths stored in the CMake user package registry. This can
- be skipped if NO_CMAKE_PACKAGE_REGISTRY is passed. On Windows a
- <package> may appear under registry key
- ::
- HKEY_CURRENT_USER\Software\Kitware\CMake\Packages\<package>
- as a REG_SZ value, with arbitrary name, that specifies the directory
- containing the package configuration file. On UNIX platforms a
- <package> may appear under the directory
- ::
- ~/.cmake/packages/<package>
- as a file, with arbitrary name, whose content specifies the directory
- containing the package configuration file. See the export(PACKAGE)
- command to create user package registry entries for project build
- trees.
- 7. Search cmake variables defined in the Platform files for the
- current system. This can be skipped if NO_CMAKE_SYSTEM_PATH is
- passed.
- ::
- CMAKE_SYSTEM_PREFIX_PATH
- CMAKE_SYSTEM_FRAMEWORK_PATH
- CMAKE_SYSTEM_APPBUNDLE_PATH
- 8. Search paths stored in the CMake system package registry. This
- can be skipped if NO_CMAKE_SYSTEM_PACKAGE_REGISTRY is passed. On
- Windows a <package> may appear under registry key
- ::
- HKEY_LOCAL_MACHINE\Software\Kitware\CMake\Packages\<package>
- 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.
- 9. Search paths specified by the PATHS option. These are typically
- hard-coded guesses.
- .. |FIND_XXX| replace:: find_package
- .. |FIND_ARGS_XXX| replace:: <package>
- .. |CMAKE_FIND_ROOT_PATH_MODE_XXX| replace::
- :variable:`CMAKE_FIND_ROOT_PATH_MODE_PACKAGE`
- .. include:: FIND_XXX_MAC.txt
- .. include:: FIND_XXX_ROOT.txt
- .. include:: FIND_XXX_ORDER.txt
- Every non-REQUIRED find_package() call can be disabled by setting the
- variable CMAKE_DISABLE_FIND_PACKAGE_<package> to TRUE. See the
- documentation for the CMAKE_DISABLE_FIND_PACKAGE_<package> variable
- for more information.
- When loading a find module or package configuration file find_package
- defines variables to provide information about the call arguments (and
- restores their original state before returning):
- ::
- <package>_FIND_REQUIRED = true if REQUIRED option was given
- <package>_FIND_QUIETLY = true if QUIET option was given
- <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
- <package>_FIND_VERSION_EXACT = true if EXACT option was given
- <package>_FIND_COMPONENTS = list of requested components
- <package>_FIND_REQUIRED_<c> = true if component <c> is required
- false if component <c> is optional
- In Module mode the loaded find module is responsible to honor the
- request detailed by these variables; see the find module for details.
- In Config mode find_package handles REQUIRED, QUIET, and version
- options automatically but leaves it to the package configuration file
- to handle components in a way that makes sense for the package. The
- package configuration file may set <package>_FOUND to false to tell
- find_package that component requirements are not satisfied.
- See the cmake_policy() command documentation for discussion of the
- NO_POLICY_SCOPE option.
|