try_compile: Propagating top level includes into whole-project calls

Fixes: #24151
This commit is contained in:
Craig Scott
2024-05-18 18:48:00 +10:00
parent ff12b19786
commit 4cb5bb014d
14 changed files with 187 additions and 5 deletions

View File

@@ -271,6 +271,11 @@ Dependency Providers
:command:`project`. Calling ``cmake_language(SET_DEPENDENCY_PROVIDER)``
outside of that context will result in an error.
.. versionadded:: 3.30
The :prop_gbl:`PROPAGATE_TOP_LEVEL_INCLUDES_TO_TRY_COMPILE` global
property can be set if the dependency provider also wants to be enabled
in whole-project calls to :command:`try_compile`.
.. note::
The choice of dependency provider should always be under the user's control.
As a convenience, a project may choose to provide a file that users can

View File

@@ -47,6 +47,11 @@ below for the meaning of other options.
:ref:`configure-log try_compile event <try_compile configure-log event>`
if the ``NO_LOG`` option is not specified.
.. versionadded:: 3.30
If the :prop_gbl:`PROPAGATE_TOP_LEVEL_INCLUDES_TO_TRY_COMPILE` global
property is set to true, :variable:`CMAKE_PROJECT_TOP_LEVEL_INCLUDES` is
propagated into the project's build configuration.
This command supports an alternate signature for CMake older than 3.25.
The signature above is recommended for clarity.
@@ -388,6 +393,12 @@ configuration:
:variable:`CMAKE_MSVC_DEBUG_INFORMATION_FORMAT` to specify the MSVC debug
information format.
.. versionadded:: 3.30
If the :prop_gbl:`PROPAGATE_TOP_LEVEL_INCLUDES_TO_TRY_COMPILE` global
property is set to true, :variable:`CMAKE_PROJECT_TOP_LEVEL_INCLUDES` is
propagated into the test project's build configuration when using the
:ref:`whole-project signature <Try Compiling Whole Projects>`.
See Also
^^^^^^^^

View File

@@ -44,6 +44,7 @@ Properties of Global Scope
/prop_gbl/PACKAGES_FOUND
/prop_gbl/PACKAGES_NOT_FOUND
/prop_gbl/PREDEFINED_TARGETS_FOLDER
/prop_gbl/PROPAGATE_TOP_LEVEL_INCLUDES_TO_TRY_COMPILE
/prop_gbl/REPORT_UNDEFINED_PROPERTIES
/prop_gbl/RULE_LAUNCH_COMPILE
/prop_gbl/RULE_LAUNCH_CUSTOM

View File

@@ -0,0 +1,19 @@
PROPAGATE_TOP_LEVEL_INCLUDES_TO_TRY_COMPILE
-------------------------------------------
.. versionadded:: 3.30
When this global property is set to true, the
:variable:`CMAKE_PROJECT_TOP_LEVEL_INCLUDES` variable is propagated into
:command:`try_compile` calls that use the
:ref:`whole-project signature <Try Compiling Whole Projects>`.
Calls to the :ref:`source file signature <Try Compiling Source Files>` are not
affected by this property.
``PROPAGATE_TOP_LEVEL_INCLUDES_TO_TRY_COMPILE`` is unset by default.
For :ref:`dependency providers <dependency_providers_overview>` that want to
be enabled in whole-project :command:`try_compile` calls, set this global
property to true just before or after registering the provider.
Note that all files listed in :variable:`CMAKE_PROJECT_TOP_LEVEL_INCLUDES`
will need to be able to handle being included in such :command:`try_compile`
calls, and it is the user's responsibility to ensure this.

View File

@@ -0,0 +1,9 @@
dep-provider-try_compile
------------------------
* The :prop_gbl:`PROPAGATE_TOP_LEVEL_INCLUDES_TO_TRY_COMPILE` global property
can be used to propagate :variable:`CMAKE_PROJECT_TOP_LEVEL_INCLUDES` into
:command:`try_compile` calls that use the
:ref:`whole-project signature <Try Compiling Whole Projects>`.
This is primarily intended as a way for dependency providers to be enabled
in such :command:`try_compile` calls.

View File

@@ -25,7 +25,10 @@ details (use :variable:`CMAKE_TOOLCHAIN_FILE` for that).
By default, this variable is empty. It is intended to be set by the user.
See also the :variable:`CMAKE_PROJECT_INCLUDE`,
:variable:`CMAKE_PROJECT_INCLUDE_BEFORE`,
:variable:`CMAKE_PROJECT_<PROJECT-NAME>_INCLUDE`, and
:variable:`CMAKE_PROJECT_<PROJECT-NAME>_INCLUDE_BEFORE` variables.
See also:
* :variable:`CMAKE_PROJECT_INCLUDE`
* :variable:`CMAKE_PROJECT_INCLUDE_BEFORE`
* :variable:`CMAKE_PROJECT_<PROJECT-NAME>_INCLUDE`
* :variable:`CMAKE_PROJECT_<PROJECT-NAME>_INCLUDE_BEFORE`
* :prop_gbl:`PROPAGATE_TOP_LEVEL_INCLUDES_TO_TRY_COMPILE`