1CMAKE-LANGUAGE(7)                    CMake                   CMAKE-LANGUAGE(7)
2
3
4

NAME

6       cmake-language - CMake Language Reference
7

ORGANIZATION

9       CMake  input  files are written in the "CMake Language" in source files
10       named CMakeLists.txt or ending in a .cmake file name extension.
11
12       CMake Language source files in a project are organized into:
13
14Directories (CMakeLists.txt),
15
16Scripts (<script>.cmake), and
17
18Modules (<module>.cmake).
19
20   Directories
21       When CMake processes a project source tree, the entry point is a source
22       file  called  CMakeLists.txt  in  the top-level source directory.  This
23       file  may  contain  the  entire  build   specification   or   use   the
24       add_subdirectory()  command  to  add subdirectories to the build.  Each
25       subdirectory added by the command must also  contain  a  CMakeLists.txt
26       file  as  the entry point to that directory.  For each source directory
27       whose CMakeLists.txt file is processed CMake generates a  corresponding
28       directory  in  the  build tree to act as the default working and output
29       directory.
30
31   Scripts
32       An individual <script>.cmake source file may  be  processed  in  script
33       mode  by  using  the  cmake(1)  command-line  tool  with the -P option.
34       Script mode simply runs the commands in the given CMake Language source
35       file  and  does  not  generate a build system.  It does not allow CMake
36       commands that define build targets or actions.
37
38   Modules
39       CMake Language code in  either  Directories  or  Scripts  may  use  the
40       include()  command to load a <module>.cmake source file in the scope of
41       the including context.  See the cmake-modules(7) manual page for  docu‐
42       mentation  of  modules  included  with the CMake distribution.  Project
43       source trees may also provide their own modules and specify their loca‐
44       tion(s) in the CMAKE_MODULE_PATH variable.
45

SYNTAX

47   Encoding
48       A  CMake  Language  source  file may be written in 7-bit ASCII text for
49       maximum portability across all supported platforms.   Newlines  may  be
50       encoded as either \n or \r\n but will be converted to \n as input files
51       are read.
52
53       Note that the implementation is 8-bit clean so source files may be  en‐
54       coded  as UTF-8 on platforms with system APIs supporting this encoding.
55       In addition, CMake 3.2 and above support source files encoded in  UTF-8
56       on  Windows (using UTF-16 to call system APIs).  Furthermore, CMake 3.0
57       and above allow a leading UTF-8 Byte-Order Mark in source files.
58
59   Source Files
60       A CMake Language source file consists of zero or more  Command  Invoca‐
61       tions separated by newlines and optionally spaces and Comments:
62
63       file         ::=  file_element*
64       file_element ::=  command_invocation line_ending |
65                         (bracket_comment|space)* line_ending
66       line_ending  ::=  line_comment? newline
67       space        ::=  <match '[ \t]+'>
68       newline      ::=  <match '\n'>
69
70
71       Note  that  any  source  file  line  not  inside Command Arguments or a
72       Bracket Comment can end in a Line Comment.
73
74   Command Invocations
75       A command invocation is a name  followed  by  paren-enclosed  arguments
76       separated by whitespace:
77
78       command_invocation  ::=  space* identifier space* '(' arguments ')'
79       identifier          ::=  <match '[A-Za-z_][A-Za-z0-9_]*'>
80       arguments           ::=  argument? separated_arguments*
81       separated_arguments ::=  separation+ argument? |
82                                separation* '(' arguments ')'
83       separation          ::=  space | line_ending
84
85
86       For example:
87
88          add_executable(hello world.c)
89
90       Command names are case-insensitive.  Nested unquoted parentheses in the
91       arguments must balance.  Each ( or ) is given to the command invocation
92       as  a literal Unquoted Argument.  This may be used in calls to the if()
93       command to enclose conditions.  For example:
94
95          if(FALSE AND (FALSE OR TRUE)) # evaluates to FALSE
96
97       NOTE:
98          CMake versions prior to 3.0 require command name identifiers  to  be
99          at least 2 characters.
100
101          CMake  versions prior to 2.8.12 silently accept an Unquoted Argument
102          or a Quoted Argument immediately following a Quoted Argument and not
103          separated  by  any  whitespace.  For compatibility, CMake 2.8.12 and
104          higher accept such code but produce a warning.
105
106   Command Arguments
107       There are three types of arguments within Command Invocations:
108
109       argument ::=  bracket_argument | quoted_argument | unquoted_argument
110
111
112   Bracket Argument
113       A bracket argument, inspired by Lua long bracket syntax, encloses  con‐
114       tent between opening and closing "brackets" of the same length:
115
116       bracket_argument ::=  bracket_open bracket_content bracket_close
117       bracket_open     ::=  '[' '='* '['
118       bracket_content  ::=  <any text not containing a bracket_close with
119                              the same number of '=' as the bracket_open>
120       bracket_close    ::=  ']' '='* ']'
121
122
123       An  opening bracket is written [ followed by zero or more = followed by
124       [.  The corresponding closing bracket is written ] followed by the same
125       number  of = followed by ].  Brackets do not nest.  A unique length may
126       always be chosen for the opening and closing brackets to contain  clos‐
127       ing brackets of other lengths.
128
129       Bracket  argument  content consists of all text between the opening and
130       closing brackets, except that one  newline  immediately  following  the
131       opening  bracket,  if  any,  is ignored.  No evaluation of the enclosed
132       content, such as Escape Sequences or Variable References, is performed.
133       A bracket argument is always given to the command invocation as exactly
134       one argument.
135
136       For example:
137
138          message([=[
139          This is the first line in a bracket argument with bracket length 1.
140          No \-escape sequences or ${variable} references are evaluated.
141          This is always one argument even though it contains a ; character.
142          The text does not end on a closing bracket of length 0 like ]].
143          It does end in a closing bracket of length 1.
144          ]=])
145
146       NOTE:
147          CMake versions prior to 3.0 do not support bracket arguments.   They
148          interpret the opening bracket as the start of an Unquoted Argument.
149
150   Quoted Argument
151       A  quoted  argument  encloses  content between opening and closing dou‐
152       ble-quote characters:
153
154       quoted_argument     ::=  '"' quoted_element* '"'
155       quoted_element      ::=  <any character except '\' or '"'> |
156                                escape_sequence |
157                                quoted_continuation
158       quoted_continuation ::=  '\' newline
159
160
161       Quoted argument content consists of all text between opening and  clos‐
162       ing  quotes.   Both Escape Sequences and Variable References are evalu‐
163       ated.  A quoted argument is always given to the command  invocation  as
164       exactly one argument.
165
166       For example:
167
168          message("This is a quoted argument containing multiple lines.
169          This is always one argument even though it contains a ; character.
170          Both \\-escape sequences and ${variable} references are evaluated.
171          The text does not end on an escaped double-quote like \".
172          It does end in an unescaped double quote.
173          ")
174
175       The  final  \  on  any  line  ending in an odd number of backslashes is
176       treated as a line continuation and ignored along with  the  immediately
177       following newline character.  For example:
178
179          message("\
180          This is the first line of a quoted argument. \
181          In fact it is the only line but since it is long \
182          the source code uses line continuation.\
183          ")
184
185       NOTE:
186          CMake  versions  prior  to  3.0  do not support continuation with \.
187          They report errors in quoted arguments containing lines ending in an
188          odd number of \ characters.
189
190   Unquoted Argument
191       An unquoted argument is not enclosed by any quoting syntax.  It may not
192       contain any whitespace, (, ), #, ", or \ except when escaped by a back‐
193       slash:
194
195       unquoted_argument ::=  unquoted_element+ | unquoted_legacy
196       unquoted_element  ::=  <any character except whitespace or one of '()#"\'> |
197                              escape_sequence
198       unquoted_legacy   ::=  <see note in text>
199
200
201       Unquoted argument content consists of all text in a contiguous block of
202       allowed or escaped characters.  Both Escape Sequences and Variable Ref‐
203       erences  are evaluated.  The resulting value is divided in the same way
204       Lists divide into elements.  Each non-empty element  is  given  to  the
205       command  invocation as an argument.  Therefore an unquoted argument may
206       be given to a command invocation as zero or more arguments.
207
208       For example:
209
210          foreach(arg
211              NoSpace
212              Escaped\ Space
213              This;Divides;Into;Five;Arguments
214              Escaped\;Semicolon
215              )
216            message("${arg}")
217          endforeach()
218
219       NOTE:
220          To support legacy CMake code, unquoted arguments  may  also  contain
221          double-quoted  strings  ("...", possibly enclosing horizontal white‐
222          space), and make-style variable references ($(MAKEVAR)).
223
224          Unescaped double-quotes must balance, may not appear at  the  begin‐
225          ning  of  an  unquoted argument, and are treated as part of the con‐
226          tent.  For example, the unquoted arguments -Da="b c", -Da=$(v),  and
227          a" "b"c"d are each interpreted literally.  They may instead be writ‐
228          ten  as  quoted  arguments  "-Da=\"b  c\"",  "-Da=$(v)",  and   "a\"
229          \"b\"c\"d", respectively.
230
231          Make-style  references  are treated literally as part of the content
232          and do not undergo variable expansion.  They are treated as part  of
233          a  single argument (rather than as separate $, (, MAKEVAR, and ) ar‐
234          guments).
235
236          The above "unquoted_legacy" production  represents  such  arguments.
237          We  do  not  recommend  using legacy unquoted arguments in new code.
238          Instead use a Quoted Argument or a Bracket Argument to represent the
239          content.
240
241   Escape Sequences
242       An escape sequence is a \ followed by one character:
243
244       escape_sequence  ::=  escape_identity | escape_encoded | escape_semicolon
245       escape_identity  ::=  '\' <match '[^A-Za-z0-9;]'>
246       escape_encoded   ::=  '\t' | '\r' | '\n'
247       escape_semicolon ::=  '\;'
248
249
250       A \ followed by a non-alphanumeric character simply encodes the literal
251       character without interpreting it as syntax.  A \t, \r, or \n encodes a
252       tab,  carriage return, or newline character, respectively. A \; outside
253       of any Variable References  encodes  itself  but  may  be  used  in  an
254       Unquoted  Argument  to encode the ; without dividing the argument value
255       on it.  A \; inside Variable References encodes the literal  ;  charac‐
256       ter.   (See also policy CMP0053 documentation for historical considera‐
257       tions.)
258
259   Variable References
260       A variable reference has the form ${<variable>} and is evaluated inside
261       a Quoted Argument or an Unquoted Argument.  A variable reference is re‐
262       placed by the value of the specified variable or  cache  entry,  or  if
263       neither  is set, by the empty string.  Variable references can nest and
264       are evaluated from the inside out, e.g. ${outer_${inner_variable}_vari‐
265       able}.
266
267       Literal variable references may consist of alphanumeric characters, the
268       characters /_.+-, and Escape Sequences.  Nested references may be  used
269       to  evaluate variables of any name.  See also policy CMP0053 documenta‐
270       tion for historical considerations and reasons why the $ is also  tech‐
271       nically permitted but is discouraged.
272
273       The  Variables  section  documents  the scope of variable names and how
274       their values are set.
275
276       An environment variable reference has the form  $ENV{<variable>}.   See
277       the Environment Variables section for more information.
278
279       A  cache variable reference has the form $CACHE{<variable>}, and is re‐
280       placed by the value of the specified cache entry without checking for a
281       normal  variable  of the same name.  If the cache entry does not exist,
282       it is replaced by the empty string.  See CACHE for more information.
283
284       The if() command has a special condition syntax that allows  for  vari‐
285       able  references in the short form <variable> instead of ${<variable>}.
286       However,  environment  variables  always  need  to  be  referenced   as
287       $ENV{<variable>}.
288
289   Comments
290       A  comment starts with a # character that is not inside a Bracket Argu‐
291       ment, Quoted Argument, or escaped with \ as part of an  Unquoted  Argu‐
292       ment.   There  are  two types of comments: a Bracket Comment and a Line
293       Comment.
294
295   Bracket Comment
296       A # immediately followed by a bracket_open forms a bracket comment con‐
297       sisting of the entire bracket enclosure:
298
299       bracket_comment ::=  '#' bracket_argument
300
301
302       For example:
303
304          #[[This is a bracket comment.
305          It runs until the close bracket.]]
306          message("First Argument\n" #[[Bracket Comment]] "Second Argument")
307
308       NOTE:
309          CMake  versions  prior to 3.0 do not support bracket comments.  They
310          interpret the opening # as the start of a Line Comment.
311
312   Line Comment
313       A # not immediately followed by a bracket_open  forms  a  line  comment
314       that runs until the end of the line:
315
316       line_comment ::=  '#' <any text not starting in a bracket_open
317                              and not containing a newline>
318
319
320       For example:
321
322          # This is a line comment.
323          message("First Argument\n" # This is a line comment :)
324                  "Second Argument") # This is a line comment.
325

CONTROL STRUCTURES

327   Conditional Blocks
328       The if()/elseif()/else()/endif() commands delimit code blocks to be ex‐
329       ecuted conditionally.
330
331   Loops
332       The foreach()/endforeach() and while()/endwhile() commands delimit code
333       blocks  to  be executed in a loop.  Inside such blocks the break() com‐
334       mand may be used to terminate the loop  early  whereas  the  continue()
335       command may be used to start with the next iteration immediately.
336
337   Command Definitions
338       The  macro()/endmacro(),  and function()/endfunction() commands delimit
339       code blocks to be recorded for later invocation as commands.
340

VARIABLES

342       Variables are the basic unit of storage in the CMake  Language.   Their
343       values  are  always  of string type, though some commands may interpret
344       the strings as values of other types.  The set() and  unset()  commands
345       explicitly  set  or unset a variable, but other commands have semantics
346       that modify variables as well.  Variable names are  case-sensitive  and
347       may consist of almost any text, but we recommend sticking to names con‐
348       sisting only of alphanumeric characters plus _ and -.
349
350       Variables have dynamic scope.  Each variable "set" or "unset" creates a
351       binding in the current scope:
352
353       Function Scope
354              Command  Definitions  created  by  the function() command create
355              commands that, when invoked, process the recorded commands in  a
356              new  variable  binding scope.  A variable "set" or "unset" binds
357              in this scope and is visible for the current  function  and  any
358              nested calls within it, but not after the function returns.
359
360       Directory Scope
361              Each  of  the  Directories in a source tree has its own variable
362              bindings.  Before processing the CMakeLists.txt file for  a  di‐
363              rectory, CMake copies all variable bindings currently defined in
364              the parent directory, if any, to initialize  the  new  directory
365              scope.   CMake Scripts, when processed with cmake -P, bind vari‐
366              ables in one "directory" scope.
367
368              A variable "set" or "unset" not inside a function call binds  to
369              the current directory scope.
370
371       Persistent Cache
372              CMake  stores a separate set of "cache" variables, or "cache en‐
373              tries", whose values  persist  across  multiple  runs  within  a
374              project  build  tree.   Cache  entries  have an isolated binding
375              scope modified only by explicit request, such as  by  the  CACHE
376              option of the set() and unset() commands.
377
378       When  evaluating Variable References, CMake first searches the function
379       call stack, if any, for a binding and then falls back to the binding in
380       the  current directory scope, if any.  If a "set" binding is found, its
381       value is used.  If an "unset" binding is found, or no binding is found,
382       CMake  then searches for a cache entry.  If a cache entry is found, its
383       value is used.  Otherwise, the variable reference evaluates to an empty
384       string.   The  $CACHE{VAR}  syntax can be used to do direct cache entry
385       lookups.
386
387       The cmake-variables(7) manual documents the  many  variables  that  are
388       provided by CMake or have meaning to CMake when set by project code.
389
390       NOTE:
391          CMake reserves identifiers that:
392
393          • begin with CMAKE_ (upper-, lower-, or mixed-case), or
394
395          • begin with _CMAKE_ (upper-, lower-, or mixed-case), or
396
397          • begin with _ followed by the name of any CMake Command.
398

ENVIRONMENT VARIABLES

400       Environment  Variables  are like ordinary Variables, with the following
401       differences:
402
403       Scope  Environment variables have global  scope  in  a  CMake  process.
404              They are never cached.
405
406       References
407              Variable  References  have  the form $ENV{<variable>}, using the
408              ENV operator.
409
410       Initialization
411              Initial values of the CMake environment variables are  those  of
412              the  calling process.  Values can be changed using the set() and
413              unset() commands.  These commands only affect the running  CMake
414              process,  not  the  system environment at large.  Changed values
415              are not written back to the calling process, and  they  are  not
416              seen by subsequent build or test processes.
417
418              See  the  cmake  -E  env command-line tool to run a command in a
419              modified environment.
420
421       Inspection
422              See the cmake -E environment command-line tool  to  display  all
423              current environment variables.
424
425       The  cmake-env-variables(7) manual documents environment variables that
426       have special meaning to CMake.
427

LISTS

429       Although all values in CMake are stored as strings,  a  string  may  be
430       treated  as a list in certain contexts, such as during evaluation of an
431       Unquoted Argument.  In such contexts, a string is divided into list el‐
432       ements  by splitting on ; characters not following an unequal number of
433       [ and ] characters and not immediately preceded by a \.   The  sequence
434       \;  does  not divide a value but is replaced by ; in the resulting ele‐
435       ment.
436
437       A list of elements is represented as a string by concatenating the ele‐
438       ments  separated  by ;.  For example, the set() command stores multiple
439       values into the destination variable as a list:
440
441          set(srcs a.c b.c c.c) # sets "srcs" to "a.c;b.c;c.c"
442
443       Lists are meant for simple use cases such as a list of source files and
444       should  not  be  used for complex data processing tasks.  Most commands
445       that construct lists do not escape ; characters in list elements,  thus
446       flattening nested lists:
447
448          set(x a "b;c") # sets "x" to "a;b;c", not "a;b\;c"
449
450       In  general, lists do not support elements containing ; characters.  To
451       avoid problems, consider the following advice:
452
453       • The interfaces of many CMake commands, variables, and properties  ac‐
454         cept  semicolon-separated  lists.   Avoid passing lists with elements
455         containing semicolons to these interfaces unless they document either
456         direct support or some way to escape or encode semicolons.
457
458       • When  constructing a list, substitute an otherwise-unused placeholder
459         for ; in elements when.  Then substitute ; for the  placeholder  when
460         processing  list elements.  For example, the following code uses | in
461         place of ; characters:
462
463            set(mylist a "b|c")
464            foreach(entry IN LISTS mylist)
465              string(REPLACE "|" ";" entry "${entry}")
466              # use "${entry}" normally
467            endforeach()
468
469         The ExternalProject module's LIST_SEPARATOR option is an  example  of
470         an interface built using this approach.
471
472       • In lists of generator expressions, use the $<SEMICOLON> generator ex‐
473         pression.
474
475       • In command calls, use Quoted Argument syntax whenever possible.   The
476         called  command  will  receive the content of the argument with semi‐
477         colons preserved.  An Unquoted Argument will be split on semicolons.
478
479       • In function() implementations, avoid ARGV and ARGN, which do not dis‐
480         tinguish semicolons in values from those separating values.  Instead,
481         prefer using named positional arguments and the ARGC and ARGV#  vari‐
482         ables.  When using cmake_parse_arguments() to parse arguments, prefer
483         its PARSE_ARGV signature, which uses the ARGV# variables.
484
485         Note that this approach does not apply to macro() implementations be‐
486         cause  they  reference  arguments  using placeholders, not real vari‐
487         ables.
488
490       2000-2023 Kitware, Inc. and Contributors
491
492
493
494
4953.25.2                           Jan 19, 2023                CMAKE-LANGUAGE(7)
Impressum