| load_cache | |
| ---------- | |
| Load in the values from another project's ``CMakeCache.txt`` cache file. This | |
| is useful for projects that depend on another project built in a separate | |
| directory tree. | |
| This command has two signatures. The recommended signature is: | |
| .. signature:: | |
| load_cache(<build-dir> READ_WITH_PREFIX <prefix> <entry>...) | |
| :target: READ_WITH_PREFIX | |
| Loads the cache file from the specified ``<build-dir>`` build directory and | |
| retrieves the listed cache entries. The retrieved values are stored in local | |
| variables, with their names prefixed by the provided ``<prefix>``. This only | |
| reads the cache values; it does not create or modify entries in the local | |
| project's cache. | |
| ``READ_WITH_PREFIX <prefix>`` | |
| For each cache ``<entry>``, a local variable is created using the specified | |
| ``<prefix>`` followed by the entry name. | |
| This signature can be also used in :option:`cmake -P` script mode. | |
| The following signature of this command is strongly discouraged, but it is | |
| provided for backward compatibility: | |
| .. signature:: | |
| load_cache(<build-dir> [EXCLUDE <entry>...] [INCLUDE_INTERNALS <entry>...]) | |
| :target: raw | |
| This form loads the cache file from the specified ``<build-dir>`` build | |
| directory and imports all its non-internal cache entries into the local | |
| project's cache as internal cache variables. By default, only non-internal | |
| entries are imported, unless the ``INCLUDE_INTERNALS`` option is used. | |
| The options are: | |
| ``EXCLUDE <entry>...`` | |
| This option can be used to exclude a given list of non-internal cache | |
| entries when importing values. | |
| ``INCLUDE_INTERNALS <entry>...`` | |
| This option can be used to provide a list of internal cache entries to | |
| include in addition to the non-internal cache entries. | |
| This signature can be used only in CMake projects. Script mode is not | |
| supported. | |
| .. note:: | |
| Instead of loading the outside project's cache file and manually accessing | |
| variables, a more robust and convenient approach is to use the | |
| :command:`export` command in the outside project, when available. This allows | |
| the project to provide its targets, configuration, or features in a | |
| structured and maintainable way, making integration simpler and less | |
| error-prone. | |
| Examples | |
| ^^^^^^^^ | |
| Reading specific cache variables from another project and storing them as local | |
| variables: | |
| .. code-block:: cmake | |
| load_cache( | |
| path/to/other-project/build-dir | |
| READ_WITH_PREFIX prefix_ | |
| OTHER_PROJECT_CACHE_VAR_1 | |
| OTHER_PROJECT_CACHE_VAR_2 | |
| ) | |
| message(STATUS "${prefix_OTHER_PROJECT_CACHE_VAR_1") | |
| message(STATUS "${prefix_OTHER_PROJECT_CACHE_VAR_2") | |
| # Outputs: | |
| # -- some-value... | |
| # -- another-value... | |
| Reading all non-internal cache entries from another project and storing them as | |
| internal cache variables using the obsolete signature: | |
| .. code-block:: cmake | |
| load_cache(path/to/other-project/build-dir) | |
| message(STATUS "${OTHER_PROJECT_CACHE_VAR_1") | |
| message(STATUS "${OTHER_PROJECT_CACHE_VAR_2") | |
| # Outputs: | |
| # -- some-value... | |
| # -- another-value... | |
| Excluding specific non-internal cache entries and including internal ones using | |
| the obsolete signature: | |
| .. code-block:: cmake | |
| load_cache( | |
| path/to/other-project/build-dir | |
| EXCLUDE OTHER_PROJECT_CACHE_VAR_2 | |
| INCLUDE_INTERNALS OTHER_PROJECT_INTERNAL_CACHE_VAR | |
| ) | |
| message(STATUS "${OTHER_PROJECT_CACHE_VAR_1") | |
| message(STATUS "${OTHER_PROJECT_CACHE_VAR_2") | |
| message(STATUS "${OTHER_PROJECT_INTERNAL_CACHE_VAR}") | |
| # Outputs: | |
| # -- some-value... | |
| # -- | |
| # -- some-internal-value... |