cmake_policy.rst 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. cmake_policy
  2. ------------
  3. Manage CMake Policy settings. See the :manual:`cmake-policies(7)`
  4. manual for defined policies.
  5. As CMake evolves it is sometimes necessary to change existing behavior
  6. in order to fix bugs or improve implementations of existing features.
  7. The CMake Policy mechanism is designed to help keep existing projects
  8. building as new versions of CMake introduce changes in behavior. Each
  9. new policy (behavioral change) is given an identifier of the form
  10. ``CMP<NNNN>`` where ``<NNNN>`` is an integer index. Documentation
  11. associated with each policy describes the ``OLD`` and ``NEW`` behavior
  12. and the reason the policy was introduced. Projects may set each policy
  13. to select the desired behavior. When CMake needs to know which behavior
  14. to use it checks for a setting specified by the project. If no
  15. setting is available the ``OLD`` behavior is assumed and a warning is
  16. produced requesting that the policy be set.
  17. Setting Policies by CMake Version
  18. ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  19. The ``cmake_policy`` command is used to set policies to ``OLD`` or ``NEW``
  20. behavior. While setting policies individually is supported, we
  21. encourage projects to set policies based on CMake versions::
  22. cmake_policy(VERSION major.minor[.patch[.tweak]])
  23. Specify that the current CMake code is written for the given
  24. version of CMake. All policies introduced in the specified version or
  25. earlier will be set to use ``NEW`` behavior. All policies introduced
  26. after the specified version will be unset (unless the
  27. :variable:`CMAKE_POLICY_DEFAULT_CMP<NNNN>` variable sets a default).
  28. This effectively requests behavior preferred as of a given CMake
  29. version and tells newer CMake versions to warn about their new policies.
  30. The policy version specified must be at least 2.4 or the command will
  31. report an error.
  32. Note that the :command:`cmake_minimum_required(VERSION)`
  33. command implicitly calls ``cmake_policy(VERSION)`` too.
  34. Setting Policies Explicitly
  35. ^^^^^^^^^^^^^^^^^^^^^^^^^^^
  36. ::
  37. cmake_policy(SET CMP<NNNN> NEW)
  38. cmake_policy(SET CMP<NNNN> OLD)
  39. Tell CMake to use the ``OLD`` or ``NEW`` behavior for a given policy.
  40. Projects depending on the old behavior of a given policy may silence a
  41. policy warning by setting the policy state to ``OLD``. Alternatively
  42. one may fix the project to work with the new behavior and set the
  43. policy state to ``NEW``.
  44. .. include:: ../policy/DEPRECATED.txt
  45. Checking Policy Settings
  46. ^^^^^^^^^^^^^^^^^^^^^^^^
  47. ::
  48. cmake_policy(GET CMP<NNNN> <variable>)
  49. Check whether a given policy is set to ``OLD`` or ``NEW`` behavior.
  50. The output ``<variable>`` value will be ``OLD`` or ``NEW`` if the
  51. policy is set, and empty otherwise.
  52. CMake Policy Stack
  53. ^^^^^^^^^^^^^^^^^^
  54. CMake keeps policy settings on a stack, so changes made by the
  55. cmake_policy command affect only the top of the stack. A new entry on
  56. the policy stack is managed automatically for each subdirectory to
  57. protect its parents and siblings. CMake also manages a new entry for
  58. scripts loaded by :command:`include` and :command:`find_package` commands
  59. except when invoked with the ``NO_POLICY_SCOPE`` option
  60. (see also policy :policy:`CMP0011`).
  61. The ``cmake_policy`` command provides an interface to manage custom
  62. entries on the policy stack::
  63. cmake_policy(PUSH)
  64. cmake_policy(POP)
  65. Each ``PUSH`` must have a matching ``POP`` to erase any changes.
  66. This is useful to make temporary changes to policy settings.
  67. Calls to the :command:`cmake_minimum_required(VERSION)`,
  68. ``cmake_policy(VERSION)``, or ``cmake_policy(SET)`` commands
  69. influence only the current top of the policy stack.
  70. Commands created by the :command:`function` and :command:`macro`
  71. commands record policy settings when they are created and
  72. use the pre-record policies when they are invoked. If the function or
  73. macro implementation sets policies, the changes automatically
  74. propagate up through callers until they reach the closest nested
  75. policy stack entry.