summaryrefslogtreecommitdiffstats
path: root/Help/command/configure_file.rst
blob: 70357f2407f0e0a2e1aa286ee6d0470ce0a3cd3b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
configure_file
--------------

Copy a file to another location and modify its contents.

::

  configure_file(<input> <output>
                 [COPYONLY] [ESCAPE_QUOTES] [@ONLY]
                 [NEWLINE_STYLE [UNIX|DOS|WIN32|LF|CRLF] ])

Copies a file <input> to file <output> and substitutes variable values
referenced in the file content.  If <input> is a relative path it is
evaluated with respect to the current source directory.  The <input>
must be a file, not a directory.  If <output> is a relative path it is
evaluated with respect to the current binary directory.  If <output>
names an existing directory the input file is placed in that directory
with its original name.

If the <input> file is modified the build system will re-run CMake to
re-configure the file and generate the build system again.

This command replaces any variables in the input file referenced as
${VAR} or @VAR@ with their values as determined by CMake.  If a
variable is not defined, it will be replaced with nothing.  If
COPYONLY is specified, then no variable expansion will take place.  If
ESCAPE_QUOTES is specified then any substituted quotes will be C-style
escaped.  The file will be configured with the current values of CMake
variables.  If @ONLY is specified, only variables of the form @VAR@
will be replaced and ${VAR} will be ignored.  This is useful for
configuring scripts that use ${VAR}.

Input file lines of the form "#cmakedefine VAR ..." will be replaced
with either "#define VAR ..." or ``/* #undef VAR */`` depending on
whether VAR is set in CMake to any value not considered a false
constant by the if() command.  (Content of "...", if any, is processed
as above.) Input file lines of the form "#cmakedefine01 VAR" will be
replaced with either "#define VAR 1" or "#define VAR 0" similarly.

With NEWLINE_STYLE the line ending could be adjusted:

::

    'UNIX' or 'LF' for \n, 'DOS', 'WIN32' or 'CRLF' for \r\n.

COPYONLY must not be used with NEWLINE_STYLE.