configure_file -------------- Copy a file to another location and modify its contents. .. code-block:: cmake configure_file( [NO_SOURCE_PERMISSIONS | USE_SOURCE_PERMISSIONS | FILE_PERMISSIONS ...] [COPYONLY] [ESCAPE_QUOTES] [@ONLY] [NEWLINE_STYLE [UNIX|DOS|WIN32|LF|CRLF] ]) Copies an ```` file to an ```` file and substitutes variable values referenced as ``@VAR@`` or ``${VAR}`` in the input file content. Each variable reference will be replaced with the current value of the variable, or the empty string if the variable is not defined. Furthermore, input lines of the form .. code-block:: c #cmakedefine VAR ... will be replaced with either .. code-block:: c #define VAR ... or .. code-block:: c /* #undef VAR */ depending on whether ``VAR`` is set in CMake to any value not considered a false constant by the :command:`if` command. The "..." content on the line after the variable name, if any, is processed as above. Unlike lines of the form ``#cmakedefine VAR ...``, in lines of the form ``#cmakedefine01 VAR``, ``VAR`` itself will expand to ``VAR 0`` or ``VAR 1`` rather than being assigned the value ``...``. Therefore, input lines of the form .. code-block:: c #cmakedefine01 VAR will be replaced with either .. code-block:: c #define VAR 0 or .. code-block:: c #define VAR 1 Input lines of the form ``#cmakedefine01 VAR ...`` will expand as ``#cmakedefine01 VAR ... 0`` or ``#cmakedefine01 VAR ... 1``, which may lead to undefined behavior. .. versionadded:: 3.10 The result lines (with the exception of the ``#undef`` comments) can be indented using spaces and/or tabs between the ``#`` character and the ``cmakedefine`` or ``cmakedefine01`` words. This whitespace indentation will be preserved in the output lines: .. code-block:: c # cmakedefine VAR # cmakedefine01 VAR will be replaced, if ``VAR`` is defined, with .. code-block:: c # define VAR # define VAR 1 If the input file is modified the build system will re-run CMake to re-configure the file and generate the build system again. The generated file is modified and its timestamp updated on subsequent cmake runs only if its content is changed. The arguments are: ```` Path to the input file. A relative path is treated with respect to the value of :variable:`CMAKE_CURRENT_SOURCE_DIR`. The input path must be a file, not a directory. ```` Path to the output file or directory. A relative path is treated with respect to the value of :variable:`CMAKE_CURRENT_BINARY_DIR`. If the path names an existing directory the output file is placed in that directory with the same file name as the input file. If the path contains non-existent directories, they are created. ``NO_SOURCE_PERMISSIONS`` .. versionadded:: 3.19 Do not transfer the permissions of the input file to the output file. The copied file permissions default to the standard 644 value (-rw-r--r--). ``USE_SOURCE_PERMISSIONS`` .. versionadded:: 3.20 Transfer the permissions of the input file to the output file. This is already the default behavior if none of the three permissions-related keywords are given (``NO_SOURCE_PERMISSIONS``, ``USE_SOURCE_PERMISSIONS`` or ``FILE_PERMISSIONS``). The ``USE_SOURCE_PERMISSIONS`` keyword mostly serves as a way of making the intended behavior clearer at the call site. ``FILE_PERMISSIONS ...`` .. versionadded:: 3.20 Ignore the input file's permissions and use the specified ```` for the output file instead. ``COPYONLY`` Copy the file without replacing any variable references or other content. This option may not be used with ``NEWLINE_STYLE``. ``ESCAPE_QUOTES`` Escape any substituted quotes with backslashes (C-style). ``@ONLY`` Restrict variable replacement to references of the form ``@VAR@``. This is useful for configuring scripts that use ``${VAR}`` syntax. ``NEWLINE_STYLE