| cmake_file_api | |
| -------------- | |
| .. versionadded:: 3.27 | |
| Enables interacting with the :manual:`CMake file API <cmake-file-api(7)>`. | |
| .. signature:: | |
| cmake_file_api(QUERY ...) | |
| The ``QUERY`` subcommand adds a file API query for the current CMake | |
| invocation. | |
| .. code-block:: cmake | |
| cmake_file_api( | |
| QUERY | |
| API_VERSION <version> | |
| [CODEMODEL <versions>...] | |
| [CACHE <versions>...] | |
| [CMAKEFILES <versions>...] | |
| [TOOLCHAINS <versions>...] | |
| ) | |
| The ``API_VERSION`` must always be given. Currently, the only supported | |
| value for ``<version>`` is 1. See :ref:`file-api v1` for details of the | |
| reply content and location. | |
| Each of the optional keywords ``CODEMODEL``, ``CACHE``, ``CMAKEFILES`` and | |
| ``TOOLCHAINS`` correspond to one of the object kinds that can be requested | |
| by the project. The ``configureLog`` object kind cannot be set with this | |
| command, since it must be set before CMake starts reading the top level | |
| ``CMakeLists.txt`` file. | |
| For each of the optional keywords, the ``<versions>`` list must contain one | |
| or more version values of the form ``major`` or ``major.minor``, where | |
| ``major`` and ``minor`` are integers. Projects should list the versions they | |
| accept in their preferred order, as only the first supported value from the | |
| list will be selected. The command will ignore versions with a ``major`` | |
| version higher than any major version it supports for that object kind. | |
| It will raise an error if it encounters an invalid version number, or if none | |
| of the requested versions is supported. | |
| For each type of object kind requested, a query equivalent to a shared, | |
| stateless query will be added internally. No query file will be created in | |
| the file system. The reply *will* be written to the file system at | |
| generation time. | |
| It is not an error to add a query for the same thing more than once, whether | |
| from query files or from multiple calls to ``cmake_file_api(QUERY)``. | |
| The final set of queries will be a merged combination of all queries | |
| specified on disk and queries submitted by the project. | |
| Example | |
| ^^^^^^^ | |
| A project may want to use replies from the file API at build time to implement | |
| some form of verification task. Instead of relying on something outside of | |
| CMake to create a query file, the project can use ``cmake_file_api(QUERY)`` | |
| to request the required information for the current run. It can then create | |
| a custom command to run at build time, knowing that the requested information | |
| should always be available. | |
| .. code-block:: cmake | |
| cmake_file_api( | |
| QUERY | |
| API_VERSION 1 | |
| CODEMODEL 2.3 | |
| TOOLCHAINS 1 | |
| ) | |
| add_custom_target(verify_project | |
| COMMAND ${CMAKE_COMMAND} | |
| -D BUILD_DIR=${CMAKE_BINARY_DIR} | |
| -D CONFIG=$<CONFIG> | |
| -P ${CMAKE_CURRENT_SOURCE_DIR}/verify_project.cmake | |
| ) |