CMP0225 ------- .. versionadded:: 4.5 :command:`ExternalProject_Add` sets :variable:`CMAKE_INSTALL_PREFIX` to ```` in the default configure command. When no ``CONFIGURE_COMMAND`` is given, :command:`ExternalProject_Add` drives the external project as a CMake project with a default configure command. CMake 4.4 and below do not pass :variable:`CMAKE_INSTALL_PREFIX` in that command, so the external project's install step uses CMake's built-in default prefix, such as ``/usr/local`` on Unix or ``C:/Program Files`` on Windows, rather than the ``INSTALL_DIR`` that the module reserves for it inside the build tree. Installing to a shared system prefix as a side effect of a build is surprising and often fails for lack of permission. CMake 4.5 and above prefer to set :variable:`CMAKE_INSTALL_PREFIX` to the external project's ``INSTALL_DIR``, so that it installs to the location the module reserves for it. The ``OLD`` behavior of this policy does not set :variable:`CMAKE_INSTALL_PREFIX` in the default configure command. The ``NEW`` behavior sets it to the external project's ``INSTALL_DIR``. This policy affects only the default configure command; a custom ``CONFIGURE_COMMAND``, including an empty one, is unaffected. A :variable:`CMAKE_INSTALL_PREFIX` given by the caller in ``CMAKE_ARGS`` (for example, through :option:`cmake --install-prefix`) or in ``CMAKE_CACHE_ARGS`` still takes precedence. A prefix given in ``CMAKE_CACHE_DEFAULT_ARGS`` does not, matching that option's non-overriding-default semantics. Setting :variable:`CMAKE_INSTALL_PREFIX` in the external project also has effects beyond the install location: :variable:`CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT` is left false, and the prefix is prepended to :variable:`CMAKE_SYSTEM_PREFIX_PATH`, which can change ``find_*()`` results. These effects apply even when the install step is disabled with ``INSTALL_COMMAND ""``. Adopting the ``NEW`` behavior in an existing build tree reconfigures the external project and overwrites its cached :variable:`CMAKE_INSTALL_PREFIX`; returning to the ``OLD`` behavior does not restore the previous cached value. As with the other directory placeholders, changing ``INSTALL_DIR`` later may not reconfigure the external project with every generator, so its build tree may need to be cleaned for the cached prefix to update. .. |INTRODUCED_IN_CMAKE_VERSION| replace:: 4.5 .. |WARNS_OR_DOES_NOT_WARN| replace:: warns .. include:: include/STANDARD_ADVICE.rst .. include:: include/DEPRECATED.rst