blob: 5e22ea9051a9aec16a66f103ca1f990e6ecbeadd [file] [log] [blame]
Ryan Prichard7aea7e92022-01-13 17:30:17 -08001.. cmake-manual-description: CMake File-Based API
2
3cmake-file-api(7)
4*****************
5
6.. only:: html
7
8 .. contents::
9
10Introduction
11============
12
13CMake provides a file-based API that clients may use to get semantic
14information about the buildsystems CMake generates. Clients may use
15the API by writing query files to a specific location in a build tree
16to request zero or more `Object Kinds`_. When CMake generates the
17buildsystem in that build tree it will read the query files and write
18reply files for the client to read.
19
20The file-based API uses a ``<build>/.cmake/api/`` directory at the top
21of a build tree. The API is versioned to support changes to the layout
22of files within the API directory. API file layout versioning is
23orthogonal to the versioning of `Object Kinds`_ used in replies.
24This version of CMake supports only one API version, `API v1`_.
25
26API v1
27======
28
29API v1 is housed in the ``<build>/.cmake/api/v1/`` directory.
30It has the following subdirectories:
31
32``query/``
33 Holds query files written by clients.
34 These may be `v1 Shared Stateless Query Files`_,
35 `v1 Client Stateless Query Files`_, or `v1 Client Stateful Query Files`_.
36
37``reply/``
38 Holds reply files written by CMake whenever it runs to generate a build
39 system. These are indexed by a `v1 Reply Index File`_ file that may
40 reference additional `v1 Reply Files`_. CMake owns all reply files.
41 Clients must never remove them.
42
43 Clients may look for and read a reply index file at any time.
44 Clients may optionally create the ``reply/`` directory at any time
45 and monitor it for the appearance of a new reply index file.
46
47v1 Shared Stateless Query Files
48-------------------------------
49
50Shared stateless query files allow clients to share requests for
51major versions of the `Object Kinds`_ and get all requested versions
52recognized by the CMake that runs.
53
54Clients may create shared requests by creating empty files in the
55``v1/query/`` directory. The form is::
56
57 <build>/.cmake/api/v1/query/<kind>-v<major>
58
59where ``<kind>`` is one of the `Object Kinds`_, ``-v`` is literal,
60and ``<major>`` is the major version number.
61
62Files of this form are stateless shared queries not owned by any specific
63client. Once created they should not be removed without external client
64coordination or human intervention.
65
66v1 Client Stateless Query Files
67-------------------------------
68
69Client stateless query files allow clients to create owned requests for
70major versions of the `Object Kinds`_ and get all requested versions
71recognized by the CMake that runs.
72
73Clients may create owned requests by creating empty files in
74client-specific query subdirectories. The form is::
75
76 <build>/.cmake/api/v1/query/client-<client>/<kind>-v<major>
77
78where ``client-`` is literal, ``<client>`` is a string uniquely
79identifying the client, ``<kind>`` is one of the `Object Kinds`_,
80``-v`` is literal, and ``<major>`` is the major version number.
81Each client must choose a unique ``<client>`` identifier via its
82own means.
83
84Files of this form are stateless queries owned by the client ``<client>``.
85The owning client may remove them at any time.
86
87v1 Client Stateful Query Files
88------------------------------
89
90Stateful query files allow clients to request a list of versions of
91each of the `Object Kinds`_ and get only the most recent version
92recognized by the CMake that runs.
93
94Clients may create owned stateful queries by creating ``query.json``
95files in client-specific query subdirectories. The form is::
96
97 <build>/.cmake/api/v1/query/client-<client>/query.json
98
99where ``client-`` is literal, ``<client>`` is a string uniquely
100identifying the client, and ``query.json`` is literal. Each client
101must choose a unique ``<client>`` identifier via its own means.
102
103``query.json`` files are stateful queries owned by the client ``<client>``.
104The owning client may update or remove them at any time. When a
105given client installation is updated it may then update the stateful
106query it writes to build trees to request newer object versions.
107This can be used to avoid asking CMake to generate multiple object
108versions unnecessarily.
109
110A ``query.json`` file must contain a JSON object:
111
112.. code-block:: json
113
114 {
115 "requests": [
116 { "kind": "<kind>" , "version": 1 },
117 { "kind": "<kind>" , "version": { "major": 1, "minor": 2 } },
118 { "kind": "<kind>" , "version": [2, 1] },
119 { "kind": "<kind>" , "version": [2, { "major": 1, "minor": 2 }] },
120 { "kind": "<kind>" , "version": 1, "client": {} },
121 { "kind": "..." }
122 ],
123 "client": {}
124 }
125
126The members are:
127
128``requests``
129 A JSON array containing zero or more requests. Each request is
130 a JSON object with members:
131
132 ``kind``
133 Specifies one of the `Object Kinds`_ to be included in the reply.
134
135 ``version``
136 Indicates the version(s) of the object kind that the client
137 understands. Versions have major and minor components following
138 semantic version conventions. The value must be
139
140 * a JSON integer specifying a (non-negative) major version number, or
141 * a JSON object containing ``major`` and (optionally) ``minor``
142 members specifying non-negative integer version components, or
143 * a JSON array whose elements are each one of the above.
144
145 ``client``
146 Optional member reserved for use by the client. This value is
147 preserved in the reply written for the client in the
148 `v1 Reply Index File`_ but is otherwise ignored. Clients may use
149 this to pass custom information with a request through to its reply.
150
151 For each requested object kind CMake will choose the *first* version
152 that it recognizes for that kind among those listed in the request.
153 The response will use the selected *major* version with the highest
154 *minor* version known to the running CMake for that major version.
155 Therefore clients should list all supported major versions in
156 preferred order along with the minimal minor version required
157 for each major version.
158
159``client``
160 Optional member reserved for use by the client. This value is
161 preserved in the reply written for the client in the
162 `v1 Reply Index File`_ but is otherwise ignored. Clients may use
163 this to pass custom information with a query through to its reply.
164
165Other ``query.json`` top-level members are reserved for future use.
166If present they are ignored for forward compatibility.
167
168v1 Reply Index File
169-------------------
170
171CMake writes an ``index-*.json`` file to the ``v1/reply/`` directory
172whenever it runs to generate a build system. Clients must read the
173reply index file first and may read other `v1 Reply Files`_ only by
174following references. The form of the reply index file name is::
175
176 <build>/.cmake/api/v1/reply/index-<unspecified>.json
177
178where ``index-`` is literal and ``<unspecified>`` is an unspecified
179name selected by CMake. Whenever a new index file is generated it
180is given a new name and any old one is deleted. During the short
181time between these steps there may be multiple index files present;
182the one with the largest name in lexicographic order is the current
183index file.
184
185The reply index file contains a JSON object:
186
187.. code-block:: json
188
189 {
190 "cmake": {
191 "version": {
192 "major": 3, "minor": 14, "patch": 0, "suffix": "",
193 "string": "3.14.0", "isDirty": false
194 },
195 "paths": {
196 "cmake": "/prefix/bin/cmake",
197 "ctest": "/prefix/bin/ctest",
198 "cpack": "/prefix/bin/cpack",
199 "root": "/prefix/share/cmake-3.14"
200 },
201 "generator": {
202 "multiConfig": false,
203 "name": "Unix Makefiles"
204 }
205 },
206 "objects": [
207 { "kind": "<kind>",
208 "version": { "major": 1, "minor": 0 },
209 "jsonFile": "<file>" },
210 { "...": "..." }
211 ],
212 "reply": {
213 "<kind>-v<major>": { "kind": "<kind>",
214 "version": { "major": 1, "minor": 0 },
215 "jsonFile": "<file>" },
216 "<unknown>": { "error": "unknown query file" },
217 "...": {},
218 "client-<client>": {
219 "<kind>-v<major>": { "kind": "<kind>",
220 "version": { "major": 1, "minor": 0 },
221 "jsonFile": "<file>" },
222 "<unknown>": { "error": "unknown query file" },
223 "...": {},
224 "query.json": {
225 "requests": [ {}, {}, {} ],
226 "responses": [
227 { "kind": "<kind>",
228 "version": { "major": 1, "minor": 0 },
229 "jsonFile": "<file>" },
230 { "error": "unknown query file" },
231 { "...": {} }
232 ],
233 "client": {}
234 }
235 }
236 }
237 }
238
239The members are:
240
241``cmake``
242 A JSON object containing information about the instance of CMake that
243 generated the reply. It contains members:
244
245 ``version``
246 A JSON object specifying the version of CMake with members:
247
248 ``major``, ``minor``, ``patch``
249 Integer values specifying the major, minor, and patch version components.
250 ``suffix``
251 A string specifying the version suffix, if any, e.g. ``g0abc3``.
252 ``string``
253 A string specifying the full version in the format
254 ``<major>.<minor>.<patch>[-<suffix>]``.
255 ``isDirty``
256 A boolean indicating whether the version was built from a version
257 controlled source tree with local modifications.
258
259 ``paths``
260 A JSON object specifying paths to things that come with CMake.
261 It has members for ``cmake``, ``ctest``, and ``cpack`` whose values
262 are JSON strings specifying the absolute path to each tool,
263 represented with forward slashes. It also has a ``root`` member for
264 the absolute path to the directory containing CMake resources like the
265 ``Modules/`` directory (see :variable:`CMAKE_ROOT`).
266
267 ``generator``
268 A JSON object describing the CMake generator used for the build.
269 It has members:
270
271 ``multiConfig``
272 A boolean specifying whether the generator supports multiple output
273 configurations.
274 ``name``
275 A string specifying the name of the generator.
276 ``platform``
277 If the generator supports :variable:`CMAKE_GENERATOR_PLATFORM`,
278 this is a string specifying the generator platform name.
279
280``objects``
281 A JSON array listing all versions of all `Object Kinds`_ generated
282 as part of the reply. Each array entry is a
283 `v1 Reply File Reference`_.
284
285``reply``
286 A JSON object mirroring the content of the ``query/`` directory
287 that CMake loaded to produce the reply. The members are of the form
288
289 ``<kind>-v<major>``
290 A member of this form appears for each of the
291 `v1 Shared Stateless Query Files`_ that CMake recognized as a
292 request for object kind ``<kind>`` with major version ``<major>``.
293 The value is a `v1 Reply File Reference`_ to the corresponding
294 reply file for that object kind and version.
295
296 ``<unknown>``
297 A member of this form appears for each of the
298 `v1 Shared Stateless Query Files`_ that CMake did not recognize.
299 The value is a JSON object with a single ``error`` member
300 containing a string with an error message indicating that the
301 query file is unknown.
302
303 ``client-<client>``
304 A member of this form appears for each client-owned directory
305 holding `v1 Client Stateless Query Files`_.
306 The value is a JSON object mirroring the content of the
307 ``query/client-<client>/`` directory. The members are of the form:
308
309 ``<kind>-v<major>``
310 A member of this form appears for each of the
311 `v1 Client Stateless Query Files`_ that CMake recognized as a
312 request for object kind ``<kind>`` with major version ``<major>``.
313 The value is a `v1 Reply File Reference`_ to the corresponding
314 reply file for that object kind and version.
315
316 ``<unknown>``
317 A member of this form appears for each of the
318 `v1 Client Stateless Query Files`_ that CMake did not recognize.
319 The value is a JSON object with a single ``error`` member
320 containing a string with an error message indicating that the
321 query file is unknown.
322
323 ``query.json``
324 This member appears for clients using
325 `v1 Client Stateful Query Files`_.
326 If the ``query.json`` file failed to read or parse as a JSON object,
327 this member is a JSON object with a single ``error`` member
328 containing a string with an error message. Otherwise, this member
329 is a JSON object mirroring the content of the ``query.json`` file.
330 The members are:
331
332 ``client``
333 A copy of the ``query.json`` file ``client`` member, if it exists.
334
335 ``requests``
336 A copy of the ``query.json`` file ``requests`` member, if it exists.
337
338 ``responses``
339 If the ``query.json`` file ``requests`` member is missing or invalid,
340 this member is a JSON object with a single ``error`` member
341 containing a string with an error message. Otherwise, this member
342 contains a JSON array with a response for each entry of the
343 ``requests`` array, in the same order. Each response is
344
345 * a JSON object with a single ``error`` member containing a string
346 with an error message, or
347 * a `v1 Reply File Reference`_ to the corresponding reply file for
348 the requested object kind and selected version.
349
350After reading the reply index file, clients may read the other
351`v1 Reply Files`_ it references.
352
353v1 Reply File Reference
354^^^^^^^^^^^^^^^^^^^^^^^
355
356The reply index file represents each reference to another reply file
357using a JSON object with members:
358
359``kind``
360 A string specifying one of the `Object Kinds`_.
361``version``
362 A JSON object with members ``major`` and ``minor`` specifying
363 integer version components of the object kind.
364``jsonFile``
365 A JSON string specifying a path relative to the reply index file
366 to another JSON file containing the object.
367
368v1 Reply Files
369--------------
370
371Reply files containing specific `Object Kinds`_ are written by CMake.
372The names of these files are unspecified and must not be interpreted
373by clients. Clients must first read the `v1 Reply Index File`_ and
374and follow references to the names of the desired response objects.
375
376Reply files (including the index file) will never be replaced by
377files of the same name but different content. This allows a client
378to read the files concurrently with a running CMake that may generate
379a new reply. However, after generating a new reply CMake will attempt
380to remove reply files from previous runs that it did not just write.
381If a client attempts to read a reply file referenced by the index but
382finds the file missing, that means a concurrent CMake has generated
383a new reply. The client may simply start again by reading the new
384reply index file.
385
386.. _`file-api object kinds`:
387
388Object Kinds
389============
390
391The CMake file-based API reports semantic information about the build
392system using the following kinds of JSON objects. Each kind of object
393is versioned independently using semantic versioning with major and
394minor components. Every kind of object has the form:
395
396.. code-block:: json
397
398 {
399 "kind": "<kind>",
400 "version": { "major": 1, "minor": 0 },
401 "...": {}
402 }
403
404The ``kind`` member is a string specifying the object kind name.
405The ``version`` member is a JSON object with ``major`` and ``minor``
406members specifying integer components of the object kind's version.
407Additional top-level members are specific to each object kind.
408
409Object Kind "codemodel"
410-----------------------
411
412The ``codemodel`` object kind describes the build system structure as
413modeled by CMake.
414
415There is only one ``codemodel`` object major version, version 2.
416Version 1 does not exist to avoid confusion with that from
417:manual:`cmake-server(7)` mode.
418
419"codemodel" version 2
420^^^^^^^^^^^^^^^^^^^^^
421
422``codemodel`` object version 2 is a JSON object:
423
424.. code-block:: json
425
426 {
427 "kind": "codemodel",
428 "version": { "major": 2, "minor": 2 },
429 "paths": {
430 "source": "/path/to/top-level-source-dir",
431 "build": "/path/to/top-level-build-dir"
432 },
433 "configurations": [
434 {
435 "name": "Debug",
436 "directories": [
437 {
438 "source": ".",
439 "build": ".",
440 "childIndexes": [ 1 ],
441 "projectIndex": 0,
442 "targetIndexes": [ 0 ],
443 "hasInstallRule": true,
444 "minimumCMakeVersion": {
445 "string": "3.14"
446 },
447 "jsonFile": "<file>"
448 },
449 {
450 "source": "sub",
451 "build": "sub",
452 "parentIndex": 0,
453 "projectIndex": 0,
454 "targetIndexes": [ 1 ],
455 "minimumCMakeVersion": {
456 "string": "3.14"
457 },
458 "jsonFile": "<file>"
459 }
460 ],
461 "projects": [
462 {
463 "name": "MyProject",
464 "directoryIndexes": [ 0, 1 ],
465 "targetIndexes": [ 0, 1 ]
466 }
467 ],
468 "targets": [
469 {
470 "name": "MyExecutable",
471 "directoryIndex": 0,
472 "projectIndex": 0,
473 "jsonFile": "<file>"
474 },
475 {
476 "name": "MyLibrary",
477 "directoryIndex": 1,
478 "projectIndex": 0,
479 "jsonFile": "<file>"
480 }
481 ]
482 }
483 ]
484 }
485
486The members specific to ``codemodel`` objects are:
487
488``paths``
489 A JSON object containing members:
490
491 ``source``
492 A string specifying the absolute path to the top-level source directory,
493 represented with forward slashes.
494
495 ``build``
496 A string specifying the absolute path to the top-level build directory,
497 represented with forward slashes.
498
499``configurations``
500 A JSON array of entries corresponding to available build configurations.
501 On single-configuration generators there is one entry for the value
502 of the :variable:`CMAKE_BUILD_TYPE` variable. For multi-configuration
503 generators there is an entry for each configuration listed in the
504 :variable:`CMAKE_CONFIGURATION_TYPES` variable.
505 Each entry is a JSON object containing members:
506
507 ``name``
508 A string specifying the name of the configuration, e.g. ``Debug``.
509
510 ``directories``
511 A JSON array of entries each corresponding to a build system directory
512 whose source directory contains a ``CMakeLists.txt`` file. The first
513 entry corresponds to the top-level directory. Each entry is a
514 JSON object containing members:
515
516 ``source``
517 A string specifying the path to the source directory, represented
518 with forward slashes. If the directory is inside the top-level
519 source directory then the path is specified relative to that
520 directory (with ``.`` for the top-level source directory itself).
521 Otherwise the path is absolute.
522
523 ``build``
524 A string specifying the path to the build directory, represented
525 with forward slashes. If the directory is inside the top-level
526 build directory then the path is specified relative to that
527 directory (with ``.`` for the top-level build directory itself).
528 Otherwise the path is absolute.
529
530 ``parentIndex``
531 Optional member that is present when the directory is not top-level.
532 The value is an unsigned integer 0-based index of another entry in
533 the main ``directories`` array that corresponds to the parent
534 directory that added this directory as a subdirectory.
535
536 ``childIndexes``
537 Optional member that is present when the directory has subdirectories.
538 The value is a JSON array of entries corresponding to child directories
539 created by the :command:`add_subdirectory` or :command:`subdirs`
540 command. Each entry is an unsigned integer 0-based index of another
541 entry in the main ``directories`` array.
542
543 ``projectIndex``
544 An unsigned integer 0-based index into the main ``projects`` array
545 indicating the build system project to which the this directory belongs.
546
547 ``targetIndexes``
548 Optional member that is present when the directory itself has targets,
549 excluding those belonging to subdirectories. The value is a JSON
550 array of entries corresponding to the targets. Each entry is an
551 unsigned integer 0-based index into the main ``targets`` array.
552
553 ``minimumCMakeVersion``
554 Optional member present when a minimum required version of CMake is
555 known for the directory. This is the ``<min>`` version given to the
556 most local call to the :command:`cmake_minimum_required(VERSION)`
557 command in the directory itself or one of its ancestors.
558 The value is a JSON object with one member:
559
560 ``string``
561 A string specifying the minimum required version in the format::
562
563 <major>.<minor>[.<patch>[.<tweak>]][<suffix>]
564
565 Each component is an unsigned integer and the suffix may be an
566 arbitrary string.
567
568 ``hasInstallRule``
569 Optional member that is present with boolean value ``true`` when
570 the directory or one of its subdirectories contains any
571 :command:`install` rules, i.e. whether a ``make install``
572 or equivalent rule is available.
573
574 ``jsonFile``
575 A JSON string specifying a path relative to the codemodel file
576 to another JSON file containing a
577 `"codemodel" version 2 "directory" object`_.
578
579 This field was added in codemodel version 2.3.
580
581 ``projects``
582 A JSON array of entries corresponding to the top-level project
583 and sub-projects defined in the build system. Each (sub-)project
584 corresponds to a source directory whose ``CMakeLists.txt`` file
585 calls the :command:`project` command with a project name different
586 from its parent directory. The first entry corresponds to the
587 top-level project.
588
589 Each entry is a JSON object containing members:
590
591 ``name``
592 A string specifying the name given to the :command:`project` command.
593
594 ``parentIndex``
595 Optional member that is present when the project is not top-level.
596 The value is an unsigned integer 0-based index of another entry in
597 the main ``projects`` array that corresponds to the parent project
598 that added this project as a sub-project.
599
600 ``childIndexes``
601 Optional member that is present when the project has sub-projects.
602 The value is a JSON array of entries corresponding to the sub-projects.
603 Each entry is an unsigned integer 0-based index of another
604 entry in the main ``projects`` array.
605
606 ``directoryIndexes``
607 A JSON array of entries corresponding to build system directories
608 that are part of the project. The first entry corresponds to the
609 top-level directory of the project. Each entry is an unsigned
610 integer 0-based index into the main ``directories`` array.
611
612 ``targetIndexes``
613 Optional member that is present when the project itself has targets,
614 excluding those belonging to sub-projects. The value is a JSON
615 array of entries corresponding to the targets. Each entry is an
616 unsigned integer 0-based index into the main ``targets`` array.
617
618 ``targets``
619 A JSON array of entries corresponding to the build system targets.
620 Such targets are created by calls to :command:`add_executable`,
621 :command:`add_library`, and :command:`add_custom_target`, excluding
622 imported targets and interface libraries (which do not generate any
623 build rules). Each entry is a JSON object containing members:
624
625 ``name``
626 A string specifying the target name.
627
628 ``id``
629 A string uniquely identifying the target. This matches the ``id``
630 field in the file referenced by ``jsonFile``.
631
632 ``directoryIndex``
633 An unsigned integer 0-based index into the main ``directories`` array
634 indicating the build system directory in which the target is defined.
635
636 ``projectIndex``
637 An unsigned integer 0-based index into the main ``projects`` array
638 indicating the build system project in which the target is defined.
639
640 ``jsonFile``
641 A JSON string specifying a path relative to the codemodel file
642 to another JSON file containing a
643 `"codemodel" version 2 "target" object`_.
644
645"codemodel" version 2 "directory" object
646^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
647
648A codemodel "directory" object is referenced by a `"codemodel" version 2`_
649object's ``directories`` array. Each "directory" object is a JSON object
650with members:
651
652``paths``
653 A JSON object containing members:
654
655 ``source``
656 A string specifying the path to the source directory, represented
657 with forward slashes. If the directory is inside the top-level
658 source directory then the path is specified relative to that
659 directory (with ``.`` for the top-level source directory itself).
660 Otherwise the path is absolute.
661
662 ``build``
663 A string specifying the path to the build directory, represented
664 with forward slashes. If the directory is inside the top-level
665 build directory then the path is specified relative to that
666 directory (with ``.`` for the top-level build directory itself).
667 Otherwise the path is absolute.
668
669``installers``
670 A JSON array of entries corresponding to :command:`install` rules.
671 Each entry is a JSON object containing members:
672
673 ``component``
674 A string specifying the component selected by the corresponding
675 :command:`install` command invocation.
676
677 ``destination``
678 Optional member that is present for specific ``type`` values below.
679 The value is a string specifying the install destination path.
680 The path may be absolute or relative to the install prefix.
681
682 ``paths``
683 Optional member that is present for specific ``type`` values below.
684 The value is a JSON array of entries corresponding to the paths
685 (files or directories) to be installed. Each entry is one of:
686
687 * A string specifying the path from which a file or directory
688 is to be installed. The portion of the path not preceded by
689 a ``/`` also specifies the path (name) to which the file
690 or directory is to be installed under the destination.
691
692 * A JSON object with members:
693
694 ``from``
695 A string specifying the path from which a file or directory
696 is to be installed.
697
698 ``to``
699 A string specifying the path to which the file or directory
700 is to be installed under the destination.
701
702 In both cases the paths are represented with forward slashes. If
703 the "from" path is inside the top-level directory documented by the
704 corresponding ``type`` value, then the path is specified relative
705 to that directory. Otherwise the path is absolute.
706
707 ``type``
708 A string specifying the type of installation rule. The value is one
709 of the following, with some variants providing additional members:
710
711 ``file``
712 An :command:`install(FILES)` or :command:`install(PROGRAMS)` call.
713 The ``destination`` and ``paths`` members are populated, with paths
714 under the top-level *source* directory expressed relative to it.
715 The ``isOptional`` member may exist.
716 This type has no additional members.
717
718 ``directory``
719 An :command:`install(DIRECTORY)` call.
720 The ``destination`` and ``paths`` members are populated, with paths
721 under the top-level *source* directory expressed relative to it.
722 The ``isOptional`` member may exist.
723 This type has no additional members.
724
725 ``target``
726 An :command:`install(TARGETS)` call.
727 The ``destination`` and ``paths`` members are populated, with paths
728 under the top-level *build* directory expressed relative to it.
729 The ``isOptional`` member may exist.
730 This type has additional members ``targetId``, ``targetIndex``,
731 ``targetIsImportLibrary``, and ``targetInstallNamelink``.
732
733 ``export``
734 An :command:`install(EXPORT)` call.
735 The ``destination`` and ``paths`` members are populated, with paths
736 under the top-level *build* directory expressed relative to it.
737 The ``paths`` entries refer to files generated automatically by
738 CMake for installation, and their actual values are considered
739 private implementation details.
740 This type has additional members ``exportName`` and ``exportTargets``.
741
742 ``script``
743 An :command:`install(SCRIPT)` call.
744 This type has additional member ``scriptFile``.
745
746 ``code``
747 An :command:`install(CODE)` call.
748 This type has no additional members.
749
750 ``importedRuntimeArtifacts``
751 An :command:`install(IMPORTED_RUNTIME_ARTIFACTS)` call.
752 The ``destination`` member is populated. The ``isOptional`` member may
753 exist. This type has no additional members.
754
755 ``runtimeDependencySet``
756 An :command:`install(RUNTIME_DEPENDENCY_SET)` call or an
757 :command:`install(TARGETS)` call with ``RUNTIME_DEPENDENCIES``. The
758 ``destination`` member is populated. This type has additional members
759 ``runtimeDependencySetName`` and ``runtimeDependencySetType``.
760
761 ``isExcludeFromAll``
762 Optional member that is present with boolean value ``true`` when
763 :command:`install` is called with the ``EXCLUDE_FROM_ALL`` option.
764
765 ``isForAllComponents``
766 Optional member that is present with boolean value ``true`` when
767 :command:`install(SCRIPT|CODE)` is called with the
768 ``ALL_COMPONENTS`` option.
769
770 ``isOptional``
771 Optional member that is present with boolean value ``true`` when
772 :command:`install` is called with the ``OPTIONAL`` option.
773 This is allowed when ``type`` is ``file``, ``directory``, or ``target``.
774
775 ``targetId``
776 Optional member that is present when ``type`` is ``target``.
777 The value is a string uniquely identifying the target to be installed.
778 This matches the ``id`` member of the target in the main
779 "codemodel" object's ``targets`` array.
780
781 ``targetIndex``
782 Optional member that is present when ``type`` is ``target``.
783 The value is an unsigned integer 0-based index into the main "codemodel"
784 object's ``targets`` array for the target to be installed.
785
786 ``targetIsImportLibrary``
787 Optional member that is present when ``type`` is ``target`` and
788 the installer is for a Windows DLL import library file or for an
789 AIX linker import file. If present, it has boolean value ``true``.
790
791 ``targetInstallNamelink``
792 Optional member that is present when ``type`` is ``target`` and
793 the installer corresponds to a target that may use symbolic links
794 to implement the :prop_tgt:`VERSION` and :prop_tgt:`SOVERSION`
795 target properties.
796 The value is a string indicating how the installer is supposed to
797 handle the symlinks: ``skip`` means the installer should skip the
798 symlinks and install only the real file, and ``only`` means the
799 installer should install only the symlinks and not the real file.
800 In all cases the ``paths`` member lists what it actually installs.
801
802 ``exportName``
803 Optional member that is present when ``type`` is ``export``.
804 The value is a string specifying the name of the export.
805
806 ``exportTargets``
807 Optional member that is present when ``type`` is ``export``.
808 The value is a JSON array of entries corresponding to the targets
809 included in the export. Each entry is a JSON object with members:
810
811 ``id``
812 A string uniquely identifying the target. This matches
813 the ``id`` member of the target in the main "codemodel"
814 object's ``targets`` array.
815
816 ``index``
817 An unsigned integer 0-based index into the main "codemodel"
818 object's ``targets`` array for the target.
819
820 ``runtimeDependencySetName``
821 Optional member that is present when ``type`` is ``runtimeDependencySet``
822 and the installer was created by an
823 :command:`install(RUNTIME_DEPENDENCY_SET)` call. The value is a string
824 specifying the name of the runtime dependency set that was installed.
825
826 ``runtimeDependencySetType``
827 Optional member that is present when ``type`` is ``runtimeDependencySet``.
828 The value is a string with one of the following values:
829
830 ``library``
831 Indicates that this installer installs dependencies that are not macOS
832 frameworks.
833
834 ``framework``
835 Indicates that this installer installs dependencies that are macOS
836 frameworks.
837
838 ``scriptFile``
839 Optional member that is present when ``type`` is ``script``.
840 The value is a string specifying the path to the script file on disk,
841 represented with forward slashes. If the file is inside the top-level
842 source directory then the path is specified relative to that directory.
843 Otherwise the path is absolute.
844
845 ``backtrace``
846 Optional member that is present when a CMake language backtrace to
847 the :command:`install` or other command invocation that added this
848 installer is available. The value is an unsigned integer 0-based
849 index into the ``backtraceGraph`` member's ``nodes`` array.
850
851``backtraceGraph``
852 A `"codemodel" version 2 "backtrace graph"`_ whose nodes are referenced
853 from ``backtrace`` members elsewhere in this "directory" object.
854
855"codemodel" version 2 "target" object
856^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
857
858A codemodel "target" object is referenced by a `"codemodel" version 2`_
859object's ``targets`` array. Each "target" object is a JSON object
860with members:
861
862``name``
863 A string specifying the logical name of the target.
864
865``id``
866 A string uniquely identifying the target. The format is unspecified
867 and should not be interpreted by clients.
868
869``type``
870 A string specifying the type of the target. The value is one of
871 ``EXECUTABLE``, ``STATIC_LIBRARY``, ``SHARED_LIBRARY``,
872 ``MODULE_LIBRARY``, ``OBJECT_LIBRARY``, ``INTERFACE_LIBRARY``,
873 or ``UTILITY``.
874
875``backtrace``
876 Optional member that is present when a CMake language backtrace to
877 the command in the source code that created the target is available.
878 The value is an unsigned integer 0-based index into the
879 ``backtraceGraph`` member's ``nodes`` array.
880
881``folder``
882 Optional member that is present when the :prop_tgt:`FOLDER` target
883 property is set. The value is a JSON object with one member:
884
885 ``name``
886 A string specifying the name of the target folder.
887
888``paths``
889 A JSON object containing members:
890
891 ``source``
892 A string specifying the path to the target's source directory,
893 represented with forward slashes. If the directory is inside the
894 top-level source directory then the path is specified relative to
895 that directory (with ``.`` for the top-level source directory itself).
896 Otherwise the path is absolute.
897
898 ``build``
899 A string specifying the path to the target's build directory,
900 represented with forward slashes. If the directory is inside the
901 top-level build directory then the path is specified relative to
902 that directory (with ``.`` for the top-level build directory itself).
903 Otherwise the path is absolute.
904
905``nameOnDisk``
906 Optional member that is present for executable and library targets
907 that are linked or archived into a single primary artifact.
908 The value is a string specifying the file name of that artifact on disk.
909
910``artifacts``
911 Optional member that is present for executable and library targets
912 that produce artifacts on disk meant for consumption by dependents.
913 The value is a JSON array of entries corresponding to the artifacts.
914 Each entry is a JSON object containing one member:
915
916 ``path``
917 A string specifying the path to the file on disk, represented with
918 forward slashes. If the file is inside the top-level build directory
919 then the path is specified relative to that directory.
920 Otherwise the path is absolute.
921
922``isGeneratorProvided``
923 Optional member that is present with boolean value ``true`` if the
924 target is provided by CMake's build system generator rather than by
925 a command in the source code.
926
927``install``
928 Optional member that is present when the target has an :command:`install`
929 rule. The value is a JSON object with members:
930
931 ``prefix``
932 A JSON object specifying the installation prefix. It has one member:
933
934 ``path``
935 A string specifying the value of :variable:`CMAKE_INSTALL_PREFIX`.
936
937 ``destinations``
938 A JSON array of entries specifying an install destination path.
939 Each entry is a JSON object with members:
940
941 ``path``
942 A string specifying the install destination path. The path may
943 be absolute or relative to the install prefix.
944
945 ``backtrace``
946 Optional member that is present when a CMake language backtrace to
947 the :command:`install` command invocation that specified this
948 destination is available. The value is an unsigned integer 0-based
949 index into the ``backtraceGraph`` member's ``nodes`` array.
950
951``link``
952 Optional member that is present for executables and shared library
953 targets that link into a runtime binary. The value is a JSON object
954 with members describing the link step:
955
956 ``language``
957 A string specifying the language (e.g. ``C``, ``CXX``, ``Fortran``)
958 of the toolchain is used to invoke the linker.
959
960 ``commandFragments``
961 Optional member that is present when fragments of the link command
962 line invocation are available. The value is a JSON array of entries
963 specifying ordered fragments. Each entry is a JSON object with members:
964
965 ``fragment``
966 A string specifying a fragment of the link command line invocation.
967 The value is encoded in the build system's native shell format.
968
969 ``role``
970 A string specifying the role of the fragment's content:
971
972 * ``flags``: link flags.
973 * ``libraries``: link library file paths or flags.
974 * ``libraryPath``: library search path flags.
975 * ``frameworkPath``: macOS framework search path flags.
976
977 ``lto``
978 Optional member that is present with boolean value ``true``
979 when link-time optimization (a.k.a. interprocedural optimization
980 or link-time code generation) is enabled.
981
982 ``sysroot``
983 Optional member that is present when the :variable:`CMAKE_SYSROOT_LINK`
984 or :variable:`CMAKE_SYSROOT` variable is defined. The value is a
985 JSON object with one member:
986
987 ``path``
988 A string specifying the absolute path to the sysroot, represented
989 with forward slashes.
990
991``archive``
992 Optional member that is present for static library targets. The value
993 is a JSON object with members describing the archive step:
994
995 ``commandFragments``
996 Optional member that is present when fragments of the archiver command
997 line invocation are available. The value is a JSON array of entries
998 specifying the fragments. Each entry is a JSON object with members:
999
1000 ``fragment``
1001 A string specifying a fragment of the archiver command line invocation.
1002 The value is encoded in the build system's native shell format.
1003
1004 ``role``
1005 A string specifying the role of the fragment's content:
1006
1007 * ``flags``: archiver flags.
1008
1009 ``lto``
1010 Optional member that is present with boolean value ``true``
1011 when link-time optimization (a.k.a. interprocedural optimization
1012 or link-time code generation) is enabled.
1013
1014``dependencies``
1015 Optional member that is present when the target depends on other targets.
1016 The value is a JSON array of entries corresponding to the dependencies.
1017 Each entry is a JSON object with members:
1018
1019 ``id``
1020 A string uniquely identifying the target on which this target depends.
1021 This matches the main ``id`` member of the other target.
1022
1023 ``backtrace``
1024 Optional member that is present when a CMake language backtrace to
1025 the :command:`add_dependencies`, :command:`target_link_libraries`,
1026 or other command invocation that created this dependency is
1027 available. The value is an unsigned integer 0-based index into
1028 the ``backtraceGraph`` member's ``nodes`` array.
1029
1030``sources``
1031 A JSON array of entries corresponding to the target's source files.
1032 Each entry is a JSON object with members:
1033
1034 ``path``
1035 A string specifying the path to the source file on disk, represented
1036 with forward slashes. If the file is inside the top-level source
1037 directory then the path is specified relative to that directory.
1038 Otherwise the path is absolute.
1039
1040 ``compileGroupIndex``
1041 Optional member that is present when the source is compiled.
1042 The value is an unsigned integer 0-based index into the
1043 ``compileGroups`` array.
1044
1045 ``sourceGroupIndex``
1046 Optional member that is present when the source is part of a source
1047 group either via the :command:`source_group` command or by default.
1048 The value is an unsigned integer 0-based index into the
1049 ``sourceGroups`` array.
1050
1051 ``isGenerated``
1052 Optional member that is present with boolean value ``true`` if
1053 the source is :prop_sf:`GENERATED`.
1054
1055 ``backtrace``
1056 Optional member that is present when a CMake language backtrace to
1057 the :command:`target_sources`, :command:`add_executable`,
1058 :command:`add_library`, :command:`add_custom_target`, or other
1059 command invocation that added this source to the target is
1060 available. The value is an unsigned integer 0-based index into
1061 the ``backtraceGraph`` member's ``nodes`` array.
1062
1063``sourceGroups``
1064 Optional member that is present when sources are grouped together by
1065 the :command:`source_group` command or by default. The value is a
1066 JSON array of entries corresponding to the groups. Each entry is
1067 a JSON object with members:
1068
1069 ``name``
1070 A string specifying the name of the source group.
1071
1072 ``sourceIndexes``
1073 A JSON array listing the sources belonging to the group.
1074 Each entry is an unsigned integer 0-based index into the
1075 main ``sources`` array for the target.
1076
1077``compileGroups``
1078 Optional member that is present when the target has sources that compile.
1079 The value is a JSON array of entries corresponding to groups of sources
1080 that all compile with the same settings. Each entry is a JSON object
1081 with members:
1082
1083 ``sourceIndexes``
1084 A JSON array listing the sources belonging to the group.
1085 Each entry is an unsigned integer 0-based index into the
1086 main ``sources`` array for the target.
1087
1088 ``language``
1089 A string specifying the language (e.g. ``C``, ``CXX``, ``Fortran``)
1090 of the toolchain is used to compile the source file.
1091
1092 ``languageStandard``
1093 Optional member that is present when the language standard is set
1094 explicitly (e.g. via :prop_tgt:`CXX_STANDARD`) or implicitly by
1095 compile features. Each entry is a JSON object with two members:
1096
1097 ``backtraces``
1098 Optional member that is present when a CMake language backtrace to
1099 the ``<LANG>_STANDARD`` setting is available. If the language
1100 standard was set implicitly by compile features those are used as
1101 the backtrace(s). It's possible for multiple compile features to
1102 require the same language standard so there could be multiple
1103 backtraces. The value is a JSON array with each entry being an
1104 unsigned integer 0-based index into the ``backtraceGraph``
1105 member's ``nodes`` array.
1106
1107 ``standard``
1108 String representing the language standard.
1109
1110 This field was added in codemodel version 2.2.
1111
1112 ``compileCommandFragments``
1113 Optional member that is present when fragments of the compiler command
1114 line invocation are available. The value is a JSON array of entries
1115 specifying ordered fragments. Each entry is a JSON object with
1116 one member:
1117
1118 ``fragment``
1119 A string specifying a fragment of the compile command line invocation.
1120 The value is encoded in the build system's native shell format.
1121
1122 ``includes``
1123 Optional member that is present when there are include directories.
1124 The value is a JSON array with an entry for each directory. Each
1125 entry is a JSON object with members:
1126
1127 ``path``
1128 A string specifying the path to the include directory,
1129 represented with forward slashes.
1130
1131 ``isSystem``
1132 Optional member that is present with boolean value ``true`` if
1133 the include directory is marked as a system include directory.
1134
1135 ``backtrace``
1136 Optional member that is present when a CMake language backtrace to
1137 the :command:`target_include_directories` or other command invocation
1138 that added this include directory is available. The value is
1139 an unsigned integer 0-based index into the ``backtraceGraph``
1140 member's ``nodes`` array.
1141
1142 ``precompileHeaders``
1143 Optional member that is present when :command:`target_precompile_headers`
1144 or other command invocations set :prop_tgt:`PRECOMPILE_HEADERS` on the
1145 target. The value is a JSON array with an entry for each header. Each
1146 entry is a JSON object with members:
1147
1148 ``header``
1149 Full path to the precompile header file.
1150
1151 ``backtrace``
1152 Optional member that is present when a CMake language backtrace to
1153 the :command:`target_precompile_headers` or other command invocation
1154 that added this precompiled header is available. The value is an
1155 unsigned integer 0-based index into the ``backtraceGraph`` member's
1156 ``nodes`` array.
1157
1158 This field was added in codemodel version 2.1.
1159
1160 ``defines``
1161 Optional member that is present when there are preprocessor definitions.
1162 The value is a JSON array with an entry for each definition. Each
1163 entry is a JSON object with members:
1164
1165 ``define``
1166 A string specifying the preprocessor definition in the format
1167 ``<name>[=<value>]``, e.g. ``DEF`` or ``DEF=1``.
1168
1169 ``backtrace``
1170 Optional member that is present when a CMake language backtrace to
1171 the :command:`target_compile_definitions` or other command invocation
1172 that added this preprocessor definition is available. The value is
1173 an unsigned integer 0-based index into the ``backtraceGraph``
1174 member's ``nodes`` array.
1175
1176 ``sysroot``
1177 Optional member that is present when the
1178 :variable:`CMAKE_SYSROOT_COMPILE` or :variable:`CMAKE_SYSROOT`
1179 variable is defined. The value is a JSON object with one member:
1180
1181 ``path``
1182 A string specifying the absolute path to the sysroot, represented
1183 with forward slashes.
1184
1185``backtraceGraph``
1186 A `"codemodel" version 2 "backtrace graph"`_ whose nodes are referenced
1187 from ``backtrace`` members elsewhere in this "target" object.
1188
1189"codemodel" version 2 "backtrace graph"
1190^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1191
1192The ``backtraceGraph`` member of a `"codemodel" version 2 "directory" object`_,
1193or `"codemodel" version 2 "target" object`_ is a JSON object describing a
1194graph of backtraces. Its nodes are referenced from ``backtrace`` members
1195elsewhere in the containing object. The backtrace graph object members are:
1196
1197``nodes``
1198 A JSON array listing nodes in the backtrace graph. Each entry
1199 is a JSON object with members:
1200
1201 ``file``
1202 An unsigned integer 0-based index into the backtrace ``files`` array.
1203
1204 ``line``
1205 An optional member present when the node represents a line within
1206 the file. The value is an unsigned integer 1-based line number.
1207
1208 ``command``
1209 An optional member present when the node represents a command
1210 invocation within the file. The value is an unsigned integer
1211 0-based index into the backtrace ``commands`` array.
1212
1213 ``parent``
1214 An optional member present when the node is not the bottom of
1215 the call stack. The value is an unsigned integer 0-based index
1216 of another entry in the backtrace ``nodes`` array.
1217
1218``commands``
1219 A JSON array listing command names referenced by backtrace nodes.
1220 Each entry is a string specifying a command name.
1221
1222``files``
1223 A JSON array listing CMake language files referenced by backtrace nodes.
1224 Each entry is a string specifying the path to a file, represented
1225 with forward slashes. If the file is inside the top-level source
1226 directory then the path is specified relative to that directory.
1227 Otherwise the path is absolute.
1228
1229Object Kind "cache"
1230-------------------
1231
1232The ``cache`` object kind lists cache entries. These are the
1233:ref:`CMake Language Variables` stored in the persistent cache
1234(``CMakeCache.txt``) for the build tree.
1235
1236There is only one ``cache`` object major version, version 2.
1237Version 1 does not exist to avoid confusion with that from
1238:manual:`cmake-server(7)` mode.
1239
1240"cache" version 2
1241^^^^^^^^^^^^^^^^^
1242
1243``cache`` object version 2 is a JSON object:
1244
1245.. code-block:: json
1246
1247 {
1248 "kind": "cache",
1249 "version": { "major": 2, "minor": 0 },
1250 "entries": [
1251 {
1252 "name": "BUILD_SHARED_LIBS",
1253 "value": "ON",
1254 "type": "BOOL",
1255 "properties": [
1256 {
1257 "name": "HELPSTRING",
1258 "value": "Build shared libraries"
1259 }
1260 ]
1261 },
1262 {
1263 "name": "CMAKE_GENERATOR",
1264 "value": "Unix Makefiles",
1265 "type": "INTERNAL",
1266 "properties": [
1267 {
1268 "name": "HELPSTRING",
1269 "value": "Name of generator."
1270 }
1271 ]
1272 }
1273 ]
1274 }
1275
1276The members specific to ``cache`` objects are:
1277
1278``entries``
1279 A JSON array whose entries are each a JSON object specifying a
1280 cache entry. The members of each entry are:
1281
1282 ``name``
1283 A string specifying the name of the entry.
1284
1285 ``value``
1286 A string specifying the value of the entry.
1287
1288 ``type``
1289 A string specifying the type of the entry used by
1290 :manual:`cmake-gui(1)` to choose a widget for editing.
1291
1292 ``properties``
1293 A JSON array of entries specifying associated
1294 :ref:`cache entry properties <Cache Entry Properties>`.
1295 Each entry is a JSON object containing members:
1296
1297 ``name``
1298 A string specifying the name of the cache entry property.
1299
1300 ``value``
1301 A string specifying the value of the cache entry property.
1302
1303Object Kind "cmakeFiles"
1304------------------------
1305
1306The ``cmakeFiles`` object kind lists files used by CMake while
1307configuring and generating the build system. These include the
1308``CMakeLists.txt`` files as well as included ``.cmake`` files.
1309
1310There is only one ``cmakeFiles`` object major version, version 1.
1311
1312"cmakeFiles" version 1
1313^^^^^^^^^^^^^^^^^^^^^^
1314
1315``cmakeFiles`` object version 1 is a JSON object:
1316
1317.. code-block:: json
1318
1319 {
1320 "kind": "cmakeFiles",
1321 "version": { "major": 1, "minor": 0 },
1322 "paths": {
1323 "build": "/path/to/top-level-build-dir",
1324 "source": "/path/to/top-level-source-dir"
1325 },
1326 "inputs": [
1327 {
1328 "path": "CMakeLists.txt"
1329 },
1330 {
1331 "isGenerated": true,
1332 "path": "/path/to/top-level-build-dir/.../CMakeSystem.cmake"
1333 },
1334 {
1335 "isExternal": true,
1336 "path": "/path/to/external/third-party/module.cmake"
1337 },
1338 {
1339 "isCMake": true,
1340 "isExternal": true,
1341 "path": "/path/to/cmake/Modules/CMakeGenericSystem.cmake"
1342 }
1343 ]
1344 }
1345
1346The members specific to ``cmakeFiles`` objects are:
1347
1348``paths``
1349 A JSON object containing members:
1350
1351 ``source``
1352 A string specifying the absolute path to the top-level source directory,
1353 represented with forward slashes.
1354
1355 ``build``
1356 A string specifying the absolute path to the top-level build directory,
1357 represented with forward slashes.
1358
1359``inputs``
1360 A JSON array whose entries are each a JSON object specifying an input
1361 file used by CMake when configuring and generating the build system.
1362 The members of each entry are:
1363
1364 ``path``
1365 A string specifying the path to an input file to CMake, represented
1366 with forward slashes. If the file is inside the top-level source
1367 directory then the path is specified relative to that directory.
1368 Otherwise the path is absolute.
1369
1370 ``isGenerated``
1371 Optional member that is present with boolean value ``true``
1372 if the path specifies a file that is under the top-level
1373 build directory and the build is out-of-source.
1374 This member is not available on in-source builds.
1375
1376 ``isExternal``
1377 Optional member that is present with boolean value ``true``
1378 if the path specifies a file that is not under the top-level
1379 source or build directories.
1380
1381 ``isCMake``
1382 Optional member that is present with boolean value ``true``
1383 if the path specifies a file in the CMake installation.
1384
1385Object Kind "toolchains"
1386------------------------
1387
1388The ``toolchains`` object kind lists properties of the toolchains used during
1389the build. These include the language, compiler path, ID, and version.
1390
1391There is only one ``toolchains`` object major version, version 1.
1392
1393"toolchains" version 1
1394^^^^^^^^^^^^^^^^^^^^^^
1395
1396``toolchains`` object version 1 is a JSON object:
1397
1398.. code-block:: json
1399
1400 {
1401 "kind": "toolchains",
1402 "version": { "major": 1, "minor": 0 },
1403 "toolchains": [
1404 {
1405 "language": "C",
1406 "compiler": {
1407 "path": "/usr/bin/cc",
1408 "id": "GNU",
1409 "version": "9.3.0",
1410 "implicit": {
1411 "includeDirectories": [
1412 "/usr/lib/gcc/x86_64-linux-gnu/9/include",
1413 "/usr/local/include",
1414 "/usr/include/x86_64-linux-gnu",
1415 "/usr/include"
1416 ],
1417 "linkDirectories": [
1418 "/usr/lib/gcc/x86_64-linux-gnu/9",
1419 "/usr/lib/x86_64-linux-gnu",
1420 "/usr/lib",
1421 "/lib/x86_64-linux-gnu",
1422 "/lib"
1423 ],
1424 "linkFrameworkDirectories": [],
1425 "linkLibraries": [ "gcc", "gcc_s", "c", "gcc", "gcc_s" ]
1426 }
1427 },
1428 "sourceFileExtensions": [ "c", "m" ]
1429 },
1430 {
1431 "language": "CXX",
1432 "compiler": {
1433 "path": "/usr/bin/c++",
1434 "id": "GNU",
1435 "version": "9.3.0",
1436 "implicit": {
1437 "includeDirectories": [
1438 "/usr/include/c++/9",
1439 "/usr/include/x86_64-linux-gnu/c++/9",
1440 "/usr/include/c++/9/backward",
1441 "/usr/lib/gcc/x86_64-linux-gnu/9/include",
1442 "/usr/local/include",
1443 "/usr/include/x86_64-linux-gnu",
1444 "/usr/include"
1445 ],
1446 "linkDirectories": [
1447 "/usr/lib/gcc/x86_64-linux-gnu/9",
1448 "/usr/lib/x86_64-linux-gnu",
1449 "/usr/lib",
1450 "/lib/x86_64-linux-gnu",
1451 "/lib"
1452 ],
1453 "linkFrameworkDirectories": [],
1454 "linkLibraries": [
1455 "stdc++", "m", "gcc_s", "gcc", "c", "gcc_s", "gcc"
1456 ]
1457 }
1458 },
1459 "sourceFileExtensions": [
1460 "C", "M", "c++", "cc", "cpp", "cxx", "mm", "CPP"
1461 ]
1462 }
1463 ]
1464 }
1465
1466The members specific to ``toolchains`` objects are:
1467
1468``toolchains``
1469 A JSON array whose entries are each a JSON object specifying a toolchain
1470 associated with a particular language. The members of each entry are:
1471
1472 ``language``
1473 A JSON string specifying the toolchain language, like C or CXX. Language
1474 names are the same as language names that can be passed to the
1475 :command:`project` command. Because CMake only supports a single toolchain
1476 per language, this field can be used as a key.
1477
1478 ``compiler``
1479 A JSON object containing members:
1480
1481 ``path``
1482 Optional member that is present when the
1483 :variable:`CMAKE_<LANG>_COMPILER` variable is defined for the current
1484 language. Its value is a JSON string holding the path to the compiler.
1485
1486 ``id``
1487 Optional member that is present when the
1488 :variable:`CMAKE_<LANG>_COMPILER_ID` variable is defined for the current
1489 language. Its value is a JSON string holding the ID (GNU, MSVC, etc.) of
1490 the compiler.
1491
1492 ``version``
1493 Optional member that is present when the
1494 :variable:`CMAKE_<LANG>_COMPILER_VERSION` variable is defined for the
1495 current language. Its value is a JSON string holding the version of the
1496 compiler.
1497
1498 ``target``
1499 Optional member that is present when the
1500 :variable:`CMAKE_<LANG>_COMPILER_TARGET` variable is defined for the
1501 current language. Its value is a JSON string holding the cross-compiling
1502 target of the compiler.
1503
1504 ``implicit``
1505 A JSON object containing members:
1506
1507 ``includeDirectories``
1508 Optional member that is present when the
1509 :variable:`CMAKE_<LANG>_IMPLICIT_INCLUDE_DIRECTORIES` variable is
1510 defined for the current language. Its value is a JSON array of JSON
1511 strings where each string holds a path to an implicit include
1512 directory for the compiler.
1513
1514 ``linkDirectories``
1515 Optional member that is present when the
1516 :variable:`CMAKE_<LANG>_IMPLICIT_LINK_DIRECTORIES` variable is
1517 defined for the current language. Its value is a JSON array of JSON
1518 strings where each string holds a path to an implicit link directory
1519 for the compiler.
1520
1521 ``linkFrameworkDirectories``
1522 Optional member that is present when the
1523 :variable:`CMAKE_<LANG>_IMPLICIT_LINK_FRAMEWORK_DIRECTORIES` variable
1524 is defined for the current language. Its value is a JSON array of JSON
1525 strings where each string holds a path to an implicit link framework
1526 directory for the compiler.
1527
1528 ``linkLibraries``
1529 Optional member that is present when the
1530 :variable:`CMAKE_<LANG>_IMPLICIT_LINK_LIBRARIES` variable is defined
1531 for the current language. Its value is a JSON array of JSON strings
1532 where each string holds a path to an implicit link library for the
1533 compiler.
1534
1535 ``sourceFileExtensions``
1536 Optional member that is present when the
1537 :variable:`CMAKE_<LANG>_SOURCE_FILE_EXTENSIONS` variable is defined for
1538 the current language. Its value is a JSON array of JSON strings where each
1539 each string holds a file extension (without the leading dot) for the
1540 language.