|
|
@@ -13,9 +13,22 @@ source directory into a destination directory. This environment variable
|
|
|
however allows the user to override this behavior, causing CMake to create
|
|
|
symbolic links instead.
|
|
|
|
|
|
-.. note::
|
|
|
- A symbolic link consists of a reference file path rather than contents of its own,
|
|
|
- hence there are two ways to express the relation, either by a relative or an absolute path.
|
|
|
+Usage Scenarios
|
|
|
+^^^^^^^^^^^^^^^
|
|
|
+
|
|
|
+Installing symbolic links rather than copying files can help in the following
|
|
|
+ways:
|
|
|
+
|
|
|
+* Conserving storage space because files do not have to be duplicated on disk.
|
|
|
+* Changes to the source of the symbolic link are seen at the install
|
|
|
+ destination without having to re-run the install step.
|
|
|
+* Editing through the link at the install destination will modify the source
|
|
|
+ of the link. This may be useful when dealing with CMake project hierarchies,
|
|
|
+ i.e. using :module:`ExternalProject` and consistent source navigation and
|
|
|
+ refactoring is desired across projects.
|
|
|
+
|
|
|
+Allowed Values
|
|
|
+^^^^^^^^^^^^^^
|
|
|
|
|
|
The following values are allowed for ``CMAKE_INSTALL_MODE``:
|
|
|
|
|
|
@@ -47,10 +60,57 @@ The following values are allowed for ``CMAKE_INSTALL_MODE``:
|
|
|
Like ``SYMLINK`` but fall back to silently copying if the symlink couldn't
|
|
|
be created.
|
|
|
|
|
|
-Installing symbolic links rather than copying files can help conserve storage space because files do
|
|
|
-not have to be duplicated on disk. However, modifications applied to the source immediately affects
|
|
|
-the symbolic link and vice versa. *Use with caution*.
|
|
|
-
|
|
|
-.. note:: ``CMAKE_INSTALL_MODE`` only affects files, *not* directories.
|
|
|
-
|
|
|
-.. note:: Symbolic links are not available on all platforms.
|
|
|
+.. note::
|
|
|
+ A symbolic link consists of a reference file path rather than contents of its
|
|
|
+ own, hence there are two ways to express the relation, either by a *relative*
|
|
|
+ or an *absolute* path.
|
|
|
+
|
|
|
+When To Set The Environment Variable
|
|
|
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
|
+
|
|
|
+For the environment variable to take effect, it must be set during the correct
|
|
|
+build phase(s).
|
|
|
+
|
|
|
+* If the project calls :command:`file(INSTALL)` directly, the environment
|
|
|
+ variable must be set during the configuration phase.
|
|
|
+* In order to apply to :command:`install()`, the environment variable must be
|
|
|
+ set during installation. This could be during a build if using the
|
|
|
+ ``install`` or ``package`` build targets, or separate from the build when
|
|
|
+ invoking an install or running :manual:`cpack <cpack(1)>` from the command
|
|
|
+ line.
|
|
|
+* When using :module:`ExternalProject`, it might be required during the build
|
|
|
+ phase, since the external project's own configure, build and install steps
|
|
|
+ will execute during the main project's build phase.
|
|
|
+
|
|
|
+Given the above, it is recommended to set the environment variable consistently
|
|
|
+across all phases (configure, build and install).
|
|
|
+
|
|
|
+Caveats
|
|
|
+^^^^^^^
|
|
|
+
|
|
|
+Use this environment variable with caution. The following highlights some
|
|
|
+points to be considered:
|
|
|
+
|
|
|
+* ``CMAKE_INSTALL_MODE`` only affects files, not directories.
|
|
|
+
|
|
|
+* Symbolic links are not available on all platforms.
|
|
|
+
|
|
|
+* The way this environment variable interacts with the install step of
|
|
|
+ :module:`ExternalProject` is more complex. For further details, see that
|
|
|
+ module's documentation.
|
|
|
+
|
|
|
+* A symbolic link ties the destination to the source in a persistent way.
|
|
|
+ Writing to either of the two affects both file system objects.
|
|
|
+ This is in contrast to normal install behavior which only copies files as
|
|
|
+ they were at the time the install was performed, with no enduring
|
|
|
+ relationship between the source and destination of the install.
|
|
|
+
|
|
|
+* Combining ``CMAKE_INSTALL_MODE`` with :prop_tgt:`IOS_INSTALL_COMBINED` is
|
|
|
+ not supported.
|
|
|
+
|
|
|
+* Changing ``CMAKE_INSTALL_MODE`` from what it was on a previous run can lead
|
|
|
+ to unexpected results. Moving from a non-symlinking mode to a symlinking
|
|
|
+ mode will discard any previous file at the destination, but the reverse is
|
|
|
+ not true. Once a symlink exists at the destination, even if you switch to a
|
|
|
+ non-symlink mode, the symlink will continue to exist at the destination and
|
|
|
+ will not be replaced by an actual file.
|