<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="generator" content="Asciidoctor 2.0.23">
<meta name="author" content="René Ferdinand Rivera Morell">
<meta name="copyright" content="Copyright 2024 René Ferdinand Rivera Morell">
<title>Structured Core Options</title>
<style>
@import url(https://fonts.googleapis.com/css?family=Varela+Round|Open+Sans:400italic,600italic,400,600|Ubuntu+Mono:400);
/*! normalize.css v2.1.2 | MIT License | git.io/normalize */
/* ========================================================================== HTML5 display definitions ========================================================================== */
/** Correct `block` display not defined in IE 8/9. */
article, aside, details, figcaption, figure, footer, header, hgroup, main, nav, section, summary { display: block; }

/** Correct `inline-block` display not defined in IE 8/9. */
audio, canvas, video { display: inline-block; }

/** Prevent modern browsers from displaying `audio` without controls. Remove excess height in iOS 5 devices. */
audio:not([controls]) { display: none; height: 0; }

/** Address `[hidden]` styling not present in IE 8/9. Hide the `template` element in IE, Safari, and Firefox < 22. */
[hidden], template { display: none; }

script { display: none !important; }

/* ========================================================================== Base ========================================================================== */
/** 1. Set default font family to sans-serif. 2. Prevent iOS text size adjust after orientation change, without disabling user zoom. */
html { font-family: sans-serif; /* 1 */ -ms-text-size-adjust: 100%; /* 2 */ -webkit-text-size-adjust: 100%; /* 2 */ }

/** Remove default margin. */
body { margin: 0; }

/* ========================================================================== Links ========================================================================== */
/** Remove the gray background color from active links in IE 10. */
a { background: transparent; }

/** Address `outline` inconsistency between Chrome and other browsers. */
a:focus { outline: thin dotted; }

/** Improve readability when focused and also mouse hovered in all browsers. */
a:active, a:hover { outline: 0; }

/* ========================================================================== Typography ========================================================================== */
/** Address variable `h1` font-size and margin within `section` and `article` contexts in Firefox 4+, Safari 5, and Chrome. */
h1 { font-size: 2em; margin: 0.67em 0; }

/** Address styling not present in IE 8/9, Safari 5, and Chrome. */
abbr[title] { border-bottom: 1px dotted; }

/** Address style set to `bolder` in Firefox 4+, Safari 5, and Chrome. */
b, strong { font-weight: bold; }

/** Address styling not present in Safari 5 and Chrome. */
dfn { font-style: italic; }

/** Address differences between Firefox and other browsers. */
hr { -moz-box-sizing: content-box; box-sizing: content-box; height: 0; }

/** Address styling not present in IE 8/9. */
mark { background: #ff0; color: #000; }

/** Correct font family set oddly in Safari 5 and Chrome. */
code, kbd, pre, samp { font-family: monospace, serif; font-size: 1em; }

/** Improve readability of pre-formatted text in all browsers. */
pre { white-space: pre-wrap; }

/** Set consistent quote types. */
q { quotes: "\201C" "\201D" "\2018" "\2019"; }

/** Address inconsistent and variable font size in all browsers. */
small { font-size: 80%; }

/** Prevent `sub` and `sup` affecting `line-height` in all browsers. */
sub, sup { font-size: 75%; line-height: 0; position: relative; vertical-align: baseline; }

sup { top: -0.5em; }

sub { bottom: -0.25em; }

/* ========================================================================== Embedded content ========================================================================== */
/** Remove border when inside `a` element in IE 8/9. */
img { border: 0; }

/** Correct overflow displayed oddly in IE 9. */
svg:not(:root) { overflow: hidden; }

/* ========================================================================== Figures ========================================================================== */
/** Address margin not present in IE 8/9 and Safari 5. */
figure { margin: 0; }

/* ========================================================================== Forms ========================================================================== */
/** Define consistent border, margin, and padding. */
fieldset { border: 1px solid #c0c0c0; margin: 0 2px; padding: 0.35em 0.625em 0.75em; }

/** 1. Correct `color` not being inherited in IE 8/9. 2. Remove padding so people aren't caught out if they zero out fieldsets. */
legend { border: 0; /* 1 */ padding: 0; /* 2 */ }

/** 1. Correct font family not being inherited in all browsers. 2. Correct font size not being inherited in all browsers. 3. Address margins set differently in Firefox 4+, Safari 5, and Chrome. */
button, input, select, textarea { font-family: inherit; /* 1 */ font-size: 100%; /* 2 */ margin: 0; /* 3 */ }

/** Address Firefox 4+ setting `line-height` on `input` using `!important` in the UA stylesheet. */
button, input { line-height: normal; }

/** Address inconsistent `text-transform` inheritance for `button` and `select`. All other form control elements do not inherit `text-transform` values. Correct `button` style inheritance in Chrome, Safari 5+, and IE 8+. Correct `select` style inheritance in Firefox 4+ and Opera. */
button, select { text-transform: none; }

/** 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio` and `video` controls. 2. Correct inability to style clickable `input` types in iOS. 3. Improve usability and consistency of cursor style between image-type `input` and others. */
button, html input[type="button"], input[type="reset"], input[type="submit"] { -webkit-appearance: button; /* 2 */ cursor: pointer; /* 3 */ }

/** Re-set default cursor for disabled elements. */
button[disabled], html input[disabled] { cursor: default; }

/** 1. Address box sizing set to `content-box` in IE 8/9. 2. Remove excess padding in IE 8/9. */
input[type="checkbox"], input[type="radio"] { box-sizing: border-box; /* 1 */ padding: 0; /* 2 */ }

/** 1. Address `appearance` set to `searchfield` in Safari 5 and Chrome. 2. Address `box-sizing` set to `border-box` in Safari 5 and Chrome (include `-moz` to future-proof). */
input[type="search"] { -webkit-appearance: textfield; /* 1 */ -moz-box-sizing: content-box; -webkit-box-sizing: content-box; /* 2 */ box-sizing: content-box; }

/** Remove inner padding and search cancel button in Safari 5 and Chrome on OS X. */
input[type="search"]::-webkit-search-cancel-button, input[type="search"]::-webkit-search-decoration { -webkit-appearance: none; }

/** Remove inner padding and border in Firefox 4+. */
button::-moz-focus-inner, input::-moz-focus-inner { border: 0; padding: 0; }

/** 1. Remove default vertical scrollbar in IE 8/9. 2. Improve readability and alignment in all browsers. */
textarea { overflow: auto; /* 1 */ vertical-align: top; /* 2 */ }

/* ========================================================================== Tables ========================================================================== */
/** Remove most spacing between table cells. */
table { border-collapse: collapse; border-spacing: 0; }

meta.foundation-mq-small { font-family: "only screen and (min-width: 768px)"; width: 768px; }

meta.foundation-mq-medium { font-family: "only screen and (min-width:1280px)"; width: 1280px; }

meta.foundation-mq-large { font-family: "only screen and (min-width:1440px)"; width: 1440px; }

*, *:before, *:after { -moz-box-sizing: border-box; -webkit-box-sizing: border-box; box-sizing: border-box; }

html, body { font-size: 100%; }

body { background: #fefdfd; color: rgba(0, 0, 0, 0.8); padding: 0; margin: 0; font-family: "Open Sans", sans-serif; font-weight: normal; font-style: normal; line-height: 1; position: relative; cursor: auto; }

a:hover { cursor: pointer; }

img, object, embed { max-width: 100%; height: auto; }

object, embed { height: 100%; }

img { -ms-interpolation-mode: bicubic; }

#map_canvas img, #map_canvas embed, #map_canvas object, .map_canvas img, .map_canvas embed, .map_canvas object { max-width: none !important; }

.left { float: left !important; }

.right { float: right !important; }

.text-left { text-align: left !important; }

.text-right { text-align: right !important; }

.text-center { text-align: center !important; }

.text-justify { text-align: justify !important; }

.hide { display: none; }

.antialiased { -webkit-font-smoothing: antialiased; }

img { display: inline-block; vertical-align: middle; }

textarea { height: auto; min-height: 50px; }

select { width: 100%; }

p.lead { font-size: 1.21875em; line-height: 1.6; }

.subheader, .admonitionblock td.content > .title, .audioblock > .title, .exampleblock > .title, .imageblock > .title, .listingblock > .title, .literalblock > .title, .stemblock > .title, .openblock > .title, .paragraph > .title, .quoteblock > .title, table.tableblock > .title, .verseblock > .title, .videoblock > .title, .dlist > .title, .olist > .title, .ulist > .title, .qlist > .title, .hdlist > .title { line-height: 1.25; color: #002c5e; font-weight: 300; margin-top: 0.2em; margin-bottom: 0.5em; }

/* Typography resets */
div, dl, dt, dd, ul, ol, li, h1, h2, h3, #toctitle, .sidebarblock > .content > .title, h4, h5, h6, pre, form, p, blockquote, th, td { margin: 0; padding: 0; direction: ltr; }

/* Default Link Styles */
a { color: #005580; text-decoration: underline; line-height: inherit; }
a:hover, a:focus { color: #078d71; }
a img { border: none; }

/* Default paragraph styles */
p { font-family: inherit; font-weight: normal; font-size: 1em; line-height: 1.5; margin-bottom: 1.25em; text-rendering: optimizeLegibility; }
p aside { font-size: 0.875em; line-height: 1.35; font-style: italic; }

/* Default header styles */
h1, h2, h3, #toctitle, .sidebarblock > .content > .title, h4, h5, h6 { font-family: "Varela Round", sans-serif; font-weight: 400; font-style: normal; color: #00326b; text-rendering: optimizeLegibility; margin-top: 0.8em; margin-bottom: 0.5em; line-height: 1.0625em; }
h1 small, h2 small, h3 small, #toctitle small, .sidebarblock > .content > .title small, h4 small, h5 small, h6 small { font-size: 60%; color: #057aff; line-height: 0; }

h1 { font-size: 2.125em; }

h2 { font-size: 1.6875em; }

h3, #toctitle, .sidebarblock > .content > .title { font-size: 1.375em; }

h4 { font-size: 1.125em; }

h5 { font-size: 1.125em; }

h6 { font-size: 1em; }

hr { border: solid rgba(145, 135, 84, 0.15); border-width: 1px 0 0; clear: both; margin: 1.25em 0 1.1875em; height: 0; }

/* Helpful Typography Defaults */
em, i { font-style: italic; line-height: inherit; }

strong, b { font-weight: bold; line-height: inherit; }

small { font-size: 60%; line-height: inherit; }

code { font-family: "Ubuntu Mono", "Inconsolata", monospace; font-weight: 400; color: #331d00; }

/* Lists */
ul, ol, dl { font-size: 1em; line-height: 1.5; margin-bottom: 1.25em; list-style-position: outside; font-family: inherit; }

ul, ol { margin-left: 1.5em; }
ul.no-bullet, ol.no-bullet { margin-left: 1.5em; }

/* Unordered Lists */
ul li ul, ul li ol { margin-left: 1.25em; margin-bottom: 0; font-size: 1em; /* Override nested font-size change */ }
ul.square li ul, ul.circle li ul, ul.disc li ul { list-style: inherit; }
ul.square { list-style-type: square; }
ul.circle { list-style-type: circle; }
ul.disc { list-style-type: disc; }
ul.no-bullet { list-style: none; }

/* Ordered Lists */
ol li ul, ol li ol { margin-left: 1.25em; margin-bottom: 0; }

/* Definition Lists */
dl dt { margin-bottom: 0.3125em; font-weight: bold; }
dl dd { margin-bottom: 1.25em; }

/* Abbreviations */
abbr, acronym { text-transform: uppercase; font-size: 90%; color: rgba(0, 0, 0, 0.8); border-bottom: 1px dotted #ddd; cursor: help; }

abbr { text-transform: none; }

/* Blockquotes */
blockquote { margin: 0 0 1.25em; padding: 0.5625em 1.25em 0 1.1875em; border-left: 1px solid #ddd; }
blockquote cite { display: block; font-size: 0.8125em; color: #666; }
blockquote cite:before { content: "\2014 \0020"; }
blockquote cite a, blockquote cite a:visited { color: #666; }

blockquote, blockquote p { line-height: 1.5; color: #999; }

/* Microformats */
.vcard { display: inline-block; margin: 0 0 1.25em 0; border: 1px solid #ddd; padding: 0.625em 0.75em; }
.vcard li { margin: 0; display: block; }
.vcard .fn { font-weight: bold; font-size: 0.9375em; }

.vevent .summary { font-weight: bold; }
.vevent abbr { cursor: auto; text-decoration: none; font-weight: bold; border: none; padding: 0 0.0625em; }

@media only screen and (min-width: 768px) { h1, h2, h3, #toctitle, .sidebarblock > .content > .title, h4, h5, h6 { line-height: 1.25; }
  h1 { font-size: 2.75em; }
  h2 { font-size: 2.3125em; }
  h3, #toctitle, .sidebarblock > .content > .title { font-size: 1.6875em; }
  h4 { font-size: 1.4375em; } }
/* Tables */
table { background: #fff; margin-bottom: 1.25em; border: solid 1px rgba(145, 135, 84, 0.15); }
table thead, table tfoot { background: rgba(119, 84, 22, 0.1); font-weight: bold; }
table thead tr th, table thead tr td, table tfoot tr th, table tfoot tr td { padding: 0.5em 0.625em 0.625em; font-size: inherit; color: rgba(0, 0, 0, 0.8); text-align: left; }
table tr th, table tr td { padding: 0.5625em 0.625em; font-size: inherit; color: rgba(0, 0, 0, 0.8); }
table tr.even, table tr.alt, table tr:nth-of-type(even) { background: rgba(119, 84, 22, 0.025); }
table thead tr th, table tfoot tr th, table tbody tr td, table tr td, table tfoot tr td { display: table-cell; line-height: 1.5; }

body { tab-size: 4; word-wrap: anywhere; -moz-osx-font-smoothing: grayscale; -webkit-font-smoothing: antialiased; }

table { word-wrap: normal; }

h1, h2, h3, #toctitle, .sidebarblock > .content > .title, h4, h5, h6 { line-height: 1.25; }

object, svg { display: inline-block; vertical-align: middle; }

.center { margin-left: auto; margin-right: auto; }

.stretch { width: 100%; }

.clearfix:before, .clearfix:after, .float-group:before, .float-group:after { content: " "; display: table; }
.clearfix:after, .float-group:after { clear: both; }

:not(pre).nobreak { word-wrap: normal; }
:not(pre).nowrap { white-space: nowrap; }
:not(pre).pre-wrap { white-space: pre-wrap; }

:not(pre):not([class^=L]) > code { font-size: 1.0625em; font-style: normal !important; letter-spacing: 0; padding: 0; line-height: 1.25; }

pre { color: inherit; font-family: "Liberation Mono", "Consolas", monospace; line-height: 1.4; }
pre code, pre pre { color: inherit; font-size: inherit; line-height: inherit; }
pre > code { display: block; }

pre.nowrap, pre.nowrap pre { white-space: pre; word-wrap: normal; }

em em { font-style: normal; }

strong strong { font-weight: normal; }

.keyseq { color: rgba(51, 51, 51, 0.8); }

kbd { font-family: "Ubuntu Mono", "Inconsolata", monospace; display: inline-block; color: rgba(0, 0, 0, 0.8); font-size: 0.65em; line-height: 1.45; background-color: #f7f7f7; border: 1px solid #ccc; -webkit-border-radius: 3px; border-radius: 3px; -moz-box-shadow: 0 1px 0 rgba(0, 0, 0, 0.2), 0 0 0 0.1em white inset; -webkit-box-shadow: 0 1px 0 rgba(0, 0, 0, 0.2), 0 0 0 0.1em white inset; box-shadow: 0 1px 0 rgba(0, 0, 0, 0.2), 0 0 0 0.1em white inset; margin: 0 0.15em; padding: 0.2em 0.5em; vertical-align: middle; position: relative; top: -0.1em; white-space: nowrap; }

.keyseq kbd:first-child { margin-left: 0; }

.keyseq kbd:last-child { margin-right: 0; }

.menuseq, .menuref { color: #000; }

.menuseq b:not(.caret), .menuref { font-weight: inherit; }

.menuseq { word-spacing: -0.02em; }
.menuseq b.caret { font-size: 1.25em; line-height: 0.8; }
.menuseq i.caret { font-weight: bold; text-align: center; width: 0.45em; }

b.button:before, b.button:after { position: relative; top: -1px; font-weight: normal; }

b.button:before { content: "["; padding: 0 3px 0 2px; }

b.button:after { content: "]"; padding: 0 2px 0 3px; }

p a > code:hover { color: #1a0f00; }

#header, #content, #footnotes, #footer { width: 100%; margin-left: auto; margin-right: auto; margin-top: 0; margin-bottom: 0; max-width: 62.5em; *zoom: 1; position: relative; padding-left: 0.9375em; padding-right: 0.9375em; }
#header:before, #header:after, #content:before, #content:after, #footnotes:before, #footnotes:after, #footer:before, #footer:after { content: " "; display: table; }
#header:after, #content:after, #footnotes:after, #footer:after { clear: both; }

#content { margin-top: 1.25em; }

#content:before { content: none; }

#header > h1:first-child { color: #703f1c; margin-top: 2.25rem; margin-bottom: 0; }
#header > h1:first-child + #toc { margin-top: 8px; border-top: 1px solid rgba(145, 135, 84, 0.15); }
#header > h1:only-child, body.toc2 #header > h1:nth-last-child(2) { border-bottom: 1px solid rgba(145, 135, 84, 0.15); padding-bottom: 8px; }
#header .details { border-bottom: 1px solid rgba(145, 135, 84, 0.15); line-height: 1.45; padding-top: 0.25em; padding-bottom: 0.25em; padding-left: 0.25em; color: #666; display: -ms-flexbox; display: -webkit-flex; display: flex; -ms-flex-flow: row wrap; -webkit-flex-flow: row wrap; flex-flow: row wrap; }
#header .details span:first-child { margin-left: -0.125em; }
#header .details span.email a { color: #999; }
#header .details br { display: none; }
#header .details br + span:before { content: "\00a0\2013\00a0"; }
#header .details br + span.author:before { content: "\00a0\22c5\00a0"; color: #999; }
#header .details br + span#revremark:before { content: "\00a0|\00a0"; }
#header #revnumber { text-transform: capitalize; }
#header #revnumber:after { content: "\00a0"; }

#content > h1:first-child:not([class]) { color: #703f1c; border-bottom: 1px solid rgba(145, 135, 84, 0.15); padding-bottom: 8px; margin-top: 0; padding-top: 1rem; margin-bottom: 1.25rem; }

#toc { border-bottom: 0px solid #ddd; padding-bottom: 0.5em; }
#toc > ul { margin-left: 0.125em; }
#toc ul.sectlevel0 > li > a { font-style: italic; }
#toc ul.sectlevel0 ul.sectlevel1 { margin: 0.5em 0; }
#toc ul { font-family: "Varela Round", sans-serif; list-style-type: none; }
#toc li { line-height: 1.3334; margin-top: 0.3334em; }
#toc a { text-decoration: none; }
#toc a:active { text-decoration: underline; }

#toctitle { color: #002c5e; font-size: 1.2em; }

@media only screen and (min-width: 768px) { #toctitle { font-size: 1.375em; }
  body.toc2 { padding-left: 15em; padding-right: 0; }
  #toc.toc2 { margin-top: 0 !important; background: #f2f2f4; position: fixed; width: 15em; left: 0; top: 0; border-right: 1px solid #ddd; border-top-width: 0 !important; border-bottom-width: 0 !important; z-index: 1000; padding: 1.25em 1em; height: 100%; overflow: auto; }
  #toc.toc2 #toctitle { margin-top: 0; margin-bottom: 0.8rem; font-size: 1.2em; }
  #toc.toc2 > ul { font-size: 0.9em; margin-bottom: 0; }
  #toc.toc2 ul ul { margin-left: 0; padding-left: 1em; }
  #toc.toc2 ul.sectlevel0 ul.sectlevel1 { padding-left: 0; margin-top: 0.5em; margin-bottom: 0.5em; }
  body.toc2.toc-right { padding-left: 0; padding-right: 15em; }
  body.toc2.toc-right #toc.toc2 { border-right-width: 0; border-left: 1px solid #ddd; left: auto; right: 0; } }
@media only screen and (min-width: 1280px) { body.toc2 { padding-left: 20em; padding-right: 0; }
  #toc.toc2 { width: 20em; }
  #toc.toc2 #toctitle { font-size: 1.375em; }
  #toc.toc2 > ul { font-size: 0.95em; }
  #toc.toc2 ul ul { padding-left: 1.25em; }
  body.toc2.toc-right { padding-left: 0; padding-right: 20em; } }
#content #toc { border-style: solid; border-width: 1px; border-color: #d6d6dd; margin-bottom: 1.25em; padding: 1.25em; background: #f2f2f4; -webkit-border-radius: 6px; border-radius: 6px; }
#content #toc > :first-child { margin-top: 0; }
#content #toc > :last-child { margin-bottom: 0; }

#footer { max-width: none; background: #0b445a; padding: 1.25em; }

#footer-text { color: #fefdfd; line-height: 1.35; }

#content { margin-bottom: 0.625em; }

.sect1 { padding-bottom: 0.625em; }

@media only screen and (min-width: 768px) { #content { margin-bottom: 1.25em; }
  .sect1 { padding-bottom: 1.25em; } }
.sect1:last-child { padding-bottom: 0; }

.sect1 + .sect1 { border-top: 0px solid #ddd; }

#content h1 > a.anchor, h2 > a.anchor, h3 > a.anchor, #toctitle > a.anchor, .sidebarblock > .content > .title > a.anchor, h4 > a.anchor, h5 > a.anchor, h6 > a.anchor { position: absolute; z-index: 1001; width: 1.5ex; margin-left: -1.5ex; display: block; text-decoration: none !important; visibility: hidden; text-align: center; font-weight: normal; }
#content h1 > a.anchor:before, h2 > a.anchor:before, h3 > a.anchor:before, #toctitle > a.anchor:before, .sidebarblock > .content > .title > a.anchor:before, h4 > a.anchor:before, h5 > a.anchor:before, h6 > a.anchor:before { content: "\00A7"; font-size: 0.85em; display: block; padding-top: 0.1em; }
#content h1:hover > a.anchor, #content h1 > a.anchor:hover, h2:hover > a.anchor, h2 > a.anchor:hover, h3:hover > a.anchor, #toctitle:hover > a.anchor, .sidebarblock > .content > .title:hover > a.anchor, h3 > a.anchor:hover, #toctitle > a.anchor:hover, .sidebarblock > .content > .title > a.anchor:hover, h4:hover > a.anchor, h4 > a.anchor:hover, h5:hover > a.anchor, h5 > a.anchor:hover, h6:hover > a.anchor, h6 > a.anchor:hover { visibility: visible; }
#content h1 > a.link, h2 > a.link, h3 > a.link, #toctitle > a.link, .sidebarblock > .content > .title > a.link, h4 > a.link, h5 > a.link, h6 > a.link { color: #00326b; text-decoration: none; }
#content h1 > a.link:hover, h2 > a.link:hover, h3 > a.link:hover, #toctitle > a.link:hover, .sidebarblock > .content > .title > a.link:hover, h4 > a.link:hover, h5 > a.link:hover, h6 > a.link:hover { color: #002652; }

details, .audioblock, .imageblock, .literalblock, .listingblock, .stemblock, .videoblock { margin-bottom: 1.25em; }

details > summary:first-of-type { cursor: pointer; display: list-item; outline: none; margin-bottom: 0.75em; }

.admonitionblock td.content > .title, .audioblock > .title, .exampleblock > .title, .imageblock > .title, .listingblock > .title, .literalblock > .title, .stemblock > .title, .openblock > .title, .paragraph > .title, .quoteblock > .title, table.tableblock > .title, .verseblock > .title, .videoblock > .title, .dlist > .title, .olist > .title, .ulist > .title, .qlist > .title, .hdlist > .title { text-rendering: optimizeLegibility; text-align: left; }

table.tableblock.fit-content > caption.title { white-space: nowrap; width: 0; }

.paragraph.lead > p, #preamble > .sectionbody > [class="paragraph"]:first-of-type p { font-size: 1.21875em; line-height: 1.6; color: #703f1c; }

table.tableblock #preamble > .sectionbody > [class="paragraph"]:first-of-type p { font-size: inherit; }

.admonitionblock > table { border-collapse: separate; border: 0; background: none; width: 100%; }
.admonitionblock > table td.icon { text-align: center; width: 80px; }
.admonitionblock > table td.icon img { max-width: none; }
.admonitionblock > table td.icon .title { font-weight: bold; font-family: "Varela Round", sans-serif; text-transform: uppercase; }
.admonitionblock > table td.content { padding-left: 1.125em; padding-right: 1.25em; border-left: 1px solid rgba(145, 135, 84, 0.15); color: #666; word-wrap: anywhere; }
.admonitionblock > table td.content > :last-child > :last-child { margin-bottom: 0; }

.exampleblock > .content { border-style: solid; border-width: 1px; border-color: #eddbdb; margin-bottom: 1.25em; padding: 1.25em; background: #fefdfd; -webkit-border-radius: 6px; border-radius: 6px; }
.exampleblock > .content > :first-child { margin-top: 0; }
.exampleblock > .content > :last-child { margin-bottom: 0; }

.sidebarblock { border-style: solid; border-width: 1px; border-color: #d1d1d8; margin-bottom: 1.25em; padding: 1.25em; background: #ececef; -webkit-border-radius: 6px; border-radius: 6px; }
.sidebarblock > :first-child { margin-top: 0; }
.sidebarblock > :last-child { margin-bottom: 0; }
.sidebarblock > .content > .title { color: #002c5e; margin-top: 0; }

.exampleblock > .content > :last-child > :last-child, .exampleblock > .content .olist > ol > li:last-child > :last-child, .exampleblock > .content .ulist > ul > li:last-child > :last-child, .exampleblock > .content .qlist > ol > li:last-child > :last-child, .sidebarblock > .content > :last-child > :last-child, .sidebarblock > .content .olist > ol > li:last-child > :last-child, .sidebarblock > .content .ulist > ul > li:last-child > :last-child, .sidebarblock > .content .qlist > ol > li:last-child > :last-child { margin-bottom: 0; }

.literalblock pre, .listingblock > .content > pre { border: 1px solid rgba(16, 195, 196, 0.125); -webkit-border-radius: 6px; border-radius: 6px; overflow-x: auto; padding: 1em; font-size: 0.8125em; }
@media only screen and (min-width: 768px) { .literalblock pre, .listingblock > .content > pre { font-size: 0.90625em; } }
@media only screen and (min-width: 1280px) { .literalblock pre, .listingblock > .content > pre { font-size: 1em; } }

.literalblock pre, .listingblock > .content > pre:not(.highlight), .listingblock > .content > pre[class="highlight"], .listingblock > .content > pre[class^="highlight "] { background: rgba(16, 195, 196, 0.05); }

.literalblock.output pre { color: rgba(16, 195, 196, 0.05); background-color: inherit; }

.listingblock > .content { position: relative; }

.listingblock code[data-lang]:before { display: none; content: attr(data-lang); position: absolute; font-size: 0.75em; top: 0.425rem; right: 0.5rem; line-height: 1; text-transform: uppercase; color: inherit; opacity: 0.5; }

.listingblock:hover code[data-lang]:before { display: block; }

.listingblock.terminal pre .command:before { content: attr(data-prompt); padding-right: 0.5em; color: inherit; opacity: 0.5; }

.listingblock.terminal pre .command:not([data-prompt]):before { content: "$"; }

.listingblock pre.highlightjs { padding: 0; }
.listingblock pre.highlightjs > code { padding: 1em; -webkit-border-radius: 6px; border-radius: 6px; }

.prettyprint { background: rgba(16, 195, 196, 0.05); }

pre.prettyprint .linenums { line-height: 1.4; margin-left: 2em; }

pre.prettyprint li { background: none; list-style-type: inherit; padding-left: 0; }

pre.prettyprint li code[data-lang]:before { opacity: 1; }

pre.prettyprint li:not(:first-child) code[data-lang]:before { display: none; }

table.linenotable { border-collapse: separate; border: 0; margin-bottom: 0; background: none; }
table.linenotable td[class] { color: inherit; vertical-align: top; padding: 0; line-height: inherit; white-space: normal; }
table.linenotable td.code { padding-left: 0.75em; }
table.linenotable td.linenos { border-right: 1px solid currentColor; opacity: 0.35; padding-right: 0.5em; }

pre.pygments .lineno { border-right: 1px solid currentColor; opacity: 0.35; display: inline-block; margin-right: 0.75em; }
pre.pygments .lineno:before { content: ""; margin-right: -0.125em; }

.quoteblock { margin: 0 1em 1.25em 1.5em; display: table; }
.quoteblock:not(.excerpt) > .title { margin-left: -1.5em; margin-bottom: 0.75em; }
.quoteblock blockquote, .quoteblock p { color: #999; font-size: 1.15rem; line-height: 1.75; word-spacing: 0.1em; letter-spacing: 0; font-style: italic; text-align: justify; }
.quoteblock blockquote { margin: 0; padding: 0; border: 0; }
.quoteblock blockquote:before { content: "\201c"; float: left; font-size: 2.75em; font-weight: bold; line-height: 0.6em; margin-left: -0.6em; color: #002c5e; text-shadow: 0 1px 2px rgba(0, 0, 0, 0.1); }
.quoteblock blockquote > .paragraph:last-child p { margin-bottom: 0; }
.quoteblock .attribution { margin-top: 0.75em; margin-right: 0.5ex; text-align: right; }

.verseblock { margin: 0 1em 1.25em 1em; }
.verseblock pre { font-family: "Open Sans", "DejaVu Sans", sans; font-size: 1.15rem; color: #999; font-weight: 300; text-rendering: optimizeLegibility; }
.verseblock pre strong { font-weight: 400; }
.verseblock .attribution { margin-top: 1.25rem; margin-left: 0.5ex; }

.quoteblock .attribution, .verseblock .attribution { font-size: 0.8125em; line-height: 1.45; font-style: italic; }
.quoteblock .attribution br, .verseblock .attribution br { display: none; }
.quoteblock .attribution cite, .verseblock .attribution cite { display: block; letter-spacing: -0.025em; color: #666; }

.quoteblock.abstract blockquote:before, .quoteblock.excerpt blockquote:before, .quoteblock .quoteblock blockquote:before { display: none; }
.quoteblock.abstract blockquote, .quoteblock.abstract p, .quoteblock.excerpt blockquote, .quoteblock.excerpt p, .quoteblock .quoteblock blockquote, .quoteblock .quoteblock p { line-height: 1.6; word-spacing: 0; }
.quoteblock.abstract { margin: 0 1em 1.25em 1em; display: block; }
.quoteblock.abstract > .title { margin: 0 0 0.375em 0; font-size: 1.15em; text-align: center; }
.quoteblock.excerpt > blockquote, .quoteblock .quoteblock { padding: 0 0 0.25em 1em; border-left: 0.25em solid rgba(145, 135, 84, 0.15); }
.quoteblock.excerpt, .quoteblock .quoteblock { margin-left: 0; }
.quoteblock.excerpt blockquote, .quoteblock.excerpt p, .quoteblock .quoteblock blockquote, .quoteblock .quoteblock p { color: inherit; font-size: 1.0625rem; }
.quoteblock.excerpt .attribution, .quoteblock .quoteblock .attribution { color: inherit; text-align: left; margin-right: 0; }

p.tableblock:last-child { margin-bottom: 0; }

td.tableblock > .content { margin-bottom: 1.25em; word-wrap: anywhere; }
td.tableblock > .content > :last-child { margin-bottom: -1.25em; }

table.tableblock, th.tableblock, td.tableblock { border: 0 solid rgba(145, 135, 84, 0.15); }

table.grid-all > * > tr > * { border-width: 1px; }

table.grid-cols > * > tr > * { border-width: 0 1px; }

table.grid-rows > * > tr > * { border-width: 1px 0; }

table.frame-all { border-width: 1px; }

table.frame-ends { border-width: 1px 0; }

table.frame-sides { border-width: 0 1px; }

table.frame-none > colgroup + * > :first-child > *, table.frame-sides > colgroup + * > :first-child > * { border-top-width: 0; }

table.frame-none > :last-child > :last-child > *, table.frame-sides > :last-child > :last-child > * { border-bottom-width: 0; }

table.frame-none > * > tr > :first-child, table.frame-ends > * > tr > :first-child { border-left-width: 0; }

table.frame-none > * > tr > :last-child, table.frame-ends > * > tr > :last-child { border-right-width: 0; }

table.stripes-all tr, table.stripes-odd tr:nth-of-type(odd), table.stripes-even tr:nth-of-type(even), table.stripes-hover tr:hover { background: rgba(119, 84, 22, 0.025); }

th.halign-left, td.halign-left { text-align: left; }

th.halign-right, td.halign-right { text-align: right; }

th.halign-center, td.halign-center { text-align: center; }

th.valign-top, td.valign-top { vertical-align: top; }

th.valign-bottom, td.valign-bottom { vertical-align: bottom; }

th.valign-middle, td.valign-middle { vertical-align: middle; }

table thead th, table tfoot th { font-weight: bold; }

tbody tr th { display: table-cell; line-height: 1.5; background: rgba(119, 84, 22, 0.1); }

tbody tr th, tbody tr th p, tfoot tr th, tfoot tr th p { color: rgba(0, 0, 0, 0.8); font-weight: bold; }

p.tableblock > code:only-child { background: none; padding: 0; }

p.tableblock { font-size: 1em; }

ol { margin-left: 1.75em; }

ul li ol { margin-left: 1.5em; }

dl dd { margin-left: 1.125em; }

dl dd:last-child, dl dd:last-child > :last-child { margin-bottom: 0; }

ol > li p, ul > li p, ul dd, ol dd, .olist .olist, .ulist .ulist, .ulist .olist, .olist .ulist { margin-bottom: 0.625em; }

ul.checklist, ul.none, ol.none, ul.no-bullet, ol.no-bullet, ol.unnumbered, ul.unstyled, ol.unstyled { list-style-type: none; }

ul.no-bullet, ol.no-bullet, ol.unnumbered { margin-left: 0.625em; }

ul.unstyled, ol.unstyled { margin-left: 0; }

ul.checklist { margin-left: 0.625em; }

ul.checklist li > p:first-child > .fa-square-o:first-child, ul.checklist li > p:first-child > .fa-check-square-o:first-child { width: 1.25em; font-size: 0.8em; position: relative; bottom: 0.125em; }

ul.checklist li > p:first-child > input[type="checkbox"]:first-child { margin-right: 0.25em; }

ul.inline { display: -ms-flexbox; display: -webkit-box; display: flex; -ms-flex-flow: row wrap; -webkit-flex-flow: row wrap; flex-flow: row wrap; list-style: none; margin: 0 0 0.625em -1.25em; }

ul.inline > li { margin-left: 1.25em; }

.unstyled dl dt { font-weight: normal; font-style: normal; }

ol.arabic { list-style-type: decimal; }

ol.decimal { list-style-type: decimal-leading-zero; }

ol.loweralpha { list-style-type: lower-alpha; }

ol.upperalpha { list-style-type: upper-alpha; }

ol.lowerroman { list-style-type: lower-roman; }

ol.upperroman { list-style-type: upper-roman; }

ol.lowergreek { list-style-type: lower-greek; }

.hdlist > table, .colist > table { border: 0; background: none; }
.hdlist > table > tbody > tr, .colist > table > tbody > tr { background: none; }

td.hdlist1, td.hdlist2 { vertical-align: top; padding: 0 0.625em; }

td.hdlist1 { font-weight: bold; padding-bottom: 1.25em; }

td.hdlist2 { word-wrap: anywhere; }

.literalblock + .colist, .listingblock + .colist { margin-top: -0.5em; }

.colist td:not([class]):first-child { padding: 0.4em 0.75em 0 0.75em; line-height: 1; vertical-align: top; }
.colist td:not([class]):first-child img { max-width: none; }
.colist td:not([class]):last-child { padding: 0.25em 0; }

.thumb, .th { line-height: 0; display: inline-block; border: solid 4px #fff; -webkit-box-shadow: 0 0 0 1px #ddd; box-shadow: 0 0 0 1px #ddd; }

.imageblock.left { margin: 0.25em 0.625em 1.25em 0; }
.imageblock.right { margin: 0.25em 0 1.25em 0.625em; }
.imageblock > .title { margin-bottom: 0; }
.imageblock.thumb, .imageblock.th { border-width: 6px; }
.imageblock.thumb > .title, .imageblock.th > .title { padding: 0 0.125em; }

.image.left, .image.right { margin-top: 0.25em; margin-bottom: 0.25em; display: inline-block; line-height: 0; }
.image.left { margin-right: 0.625em; }
.image.right { margin-left: 0.625em; }

a.image { text-decoration: none; display: inline-block; }
a.image object { pointer-events: none; }

sup.footnote, sup.footnoteref { font-size: 0.875em; position: static; vertical-align: super; }
sup.footnote a, sup.footnoteref a { text-decoration: none; }
sup.footnote a:active, sup.footnoteref a:active { text-decoration: underline; }

#footnotes { padding-top: 0.75em; padding-bottom: 0.75em; margin-bottom: 0.625em; }
#footnotes hr { width: 20%; min-width: 6.25em; margin: -0.25em 0 0.75em 0; border-width: 1px 0 0 0; }
#footnotes .footnote { padding: 0 0.375em 0 0.225em; line-height: 1.3334; font-size: 0.875em; margin-left: 1.2em; margin-bottom: 0.2em; }
#footnotes .footnote a:first-of-type { font-weight: bold; text-decoration: none; margin-left: -1.05em; }
#footnotes .footnote:last-of-type { margin-bottom: 0; }
#content #footnotes { margin-top: -0.625em; margin-bottom: 0; padding: 0.75em 0; }

.gist .file-data > table { border: 0; background: #fff; width: 100%; margin-bottom: 0; }
.gist .file-data > table td.line-data { width: 99%; }

div.unbreakable { page-break-inside: avoid; }

.big { font-size: larger; }

.small { font-size: smaller; }

.underline { text-decoration: underline; }

.overline { text-decoration: overline; }

.line-through { text-decoration: line-through; }

.aqua { color: #00bfbf; }

.aqua-background { background-color: #00fafa; }

.black { color: black; }

.black-background { background-color: black; }

.blue { color: #0000bf; }

.blue-background { background-color: #0000fa; }

.fuchsia { color: #bf00bf; }

.fuchsia-background { background-color: #fa00fa; }

.gray { color: #606060; }

.gray-background { background-color: #7d7d7d; }

.green { color: #006000; }

.green-background { background-color: #007d00; }

.lime { color: #00bf00; }

.lime-background { background-color: #00fa00; }

.maroon { color: #600000; }

.maroon-background { background-color: #7d0000; }

.navy { color: #000060; }

.navy-background { background-color: #00007d; }

.olive { color: #606000; }

.olive-background { background-color: #7d7d00; }

.purple { color: #600060; }

.purple-background { background-color: #7d007d; }

.red { color: #bf0000; }

.red-background { background-color: #fa0000; }

.silver { color: #909090; }

.silver-background { background-color: #bcbcbc; }

.teal { color: #006060; }

.teal-background { background-color: #007d7d; }

.white { color: #bfbfbf; }

.white-background { background-color: #fafafa; }

.yellow { color: #bfbf00; }

.yellow-background { background-color: #fafa00; }

span.icon > .fa { cursor: default; }
a span.icon > .fa { cursor: inherit; }

.admonitionblock td.icon [class^="fa icon-"] { font-size: 2.5em; text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.5); cursor: default; }
.admonitionblock td.icon .icon-note:before { content: "\f05a"; color: #004060; }
.admonitionblock td.icon .icon-tip:before { content: "\f0eb"; text-shadow: 1px 1px 2px rgba(155, 155, 0, 0.8); color: #111; }
.admonitionblock td.icon .icon-warning:before { content: "\f071"; color: #bf6900; }
.admonitionblock td.icon .icon-caution:before { content: "\f06d"; color: #bf3400; }
.admonitionblock td.icon .icon-important:before { content: "\f06a"; color: #bf0000; }

.conum[data-value] { display: inline-block; color: #fff !important; background-color: rgba(0, 0, 0, 0.8); -webkit-border-radius: 50%; border-radius: 50%; text-align: center; font-size: 0.75em; width: 1.67em; height: 1.67em; line-height: 1.67em; font-family: "Open Sans", "DejaVu Sans", sans-serif; font-style: normal; font-weight: bold; }
.conum[data-value] * { color: #fff !important; }
.conum[data-value] + b { display: none; }
.conum[data-value]:after { content: attr(data-value); }
pre .conum[data-value] { position: relative; top: -0.125em; }

b.conum * { color: inherit !important; }

.conum:not([data-value]):empty { display: none; }

#toc.toc2 ul ul { list-style-type: circle; padding-left: 2em; }

.sect1 { padding-bottom: 0 !important; margin-bottom: 2.5em; }

#header h1 { font-weight: bold; position: relative; left: -0.0625em; }

#content h2, #content h3, #content #toctitle, #content .sidebarblock > .content > .title, #content h4, #content h5, #content #toctitle { position: relative; left: -0.0625em; }
#content h2 { font-weight: bold; }

.paragraph.lead > p, #preamble > .sectionbody > .paragraph:first-of-type p { color: black; }

pre.pygments.highlight { background-color: rgba(16, 195, 196, 0.05); }

.pygments .tok-err { border: none !important; color: #800000 !important; }

.pygments .tok-c { color: #999 !important; }

</style>
<style>
pre.rouge table td { padding: 5px; }
pre.rouge table pre { margin: 0; }
pre.rouge, pre.rouge .w {
  color: #586e75;
}
pre.rouge .err {
  color: #002b36;
  background-color: #dc322f;
}
pre.rouge .c, pre.rouge .ch, pre.rouge .cd, pre.rouge .cm, pre.rouge .cpf, pre.rouge .c1, pre.rouge .cs {
  color: #657b83;
}
pre.rouge .cp {
  color: #b58900;
}
pre.rouge .nt {
  color: #b58900;
}
pre.rouge .o, pre.rouge .ow {
  color: #93a1a1;
}
pre.rouge .p, pre.rouge .pi {
  color: #93a1a1;
}
pre.rouge .gi {
  color: #859900;
}
pre.rouge .gd {
  color: #dc322f;
}
pre.rouge .gh {
  color: #268bd2;
  background-color: #002b36;
  font-weight: bold;
}
pre.rouge .ge {
  font-style: italic;
}
pre.rouge .ges {
  font-weight: bold;
  font-style: italic;
}
pre.rouge .gs {
  font-weight: bold;
}
pre.rouge .k, pre.rouge .kn, pre.rouge .kp, pre.rouge .kr, pre.rouge .kv {
  color: #6c71c4;
}
pre.rouge .kc {
  color: #cb4b16;
}
pre.rouge .kt {
  color: #cb4b16;
}
pre.rouge .kd {
  color: #cb4b16;
}
pre.rouge .s, pre.rouge .sb, pre.rouge .sc, pre.rouge .dl, pre.rouge .sd, pre.rouge .s2, pre.rouge .sh, pre.rouge .sx, pre.rouge .s1 {
  color: #859900;
}
pre.rouge .sa {
  color: #6c71c4;
}
pre.rouge .sr {
  color: #2aa198;
}
pre.rouge .si {
  color: #d33682;
}
pre.rouge .se {
  color: #d33682;
}
pre.rouge .nn {
  color: #b58900;
}
pre.rouge .nc {
  color: #b58900;
}
pre.rouge .no {
  color: #b58900;
}
pre.rouge .na {
  color: #268bd2;
}
pre.rouge .m, pre.rouge .mb, pre.rouge .mf, pre.rouge .mh, pre.rouge .mi, pre.rouge .il, pre.rouge .mo, pre.rouge .mx {
  color: #859900;
}
pre.rouge .ss {
  color: #859900;
}
</style>
</head>
<body class="book toc2 toc-left">
<div id="header">
<h1>Structured Core Options</h1>
<div class="details">
<span id="author" class="author">René Ferdinand Rivera Morell</span><br>
<span id="email" class="email"><a href="mailto:grafikrobot@gmail.com">grafikrobot@gmail.com</a></span><br>
<span id="revnumber"> P3335R2,</span>
<span id="revdate">2024-10-15</span>
</div>
<div id="toc" class="toc2">
<div id="toctitle">Table of Contents</div>
<ul class="sectlevel0">
<li><a href="#_proposal">I: Proposal</a>
<ul class="sectlevel1">
<li><a href="#_abstract">1. Abstract</a></li>
<li><a href="#_revision_history">2. Revision History</a>
<ul class="sectlevel2">
<li><a href="#_revision_2_october_2024">2.1. Revision 2 (October 2024)</a></li>
<li><a href="#_revision_1_september_2024">2.2. Revision 1 (September 2024)</a></li>
<li><a href="#_revision_0_july_2024">2.3. Revision 0 (July 2024)</a></li>
</ul>
</li>
<li><a href="#_motivation">3. Motivation</a></li>
<li><a href="#_scope">4. Scope</a></li>
<li><a href="#_design">5. Design</a>
<ul class="sectlevel2">
<li><a href="#_file_references">5.1. File References</a></li>
<li><a href="#_lists">5.2. Lists</a></li>
<li><a href="#_examples">5.3. Examples</a>
<ul class="sectlevel3">
<li><a href="#_hello_world">5.3.1. Hello World</a></li>
<li><a href="#_compile_and_link">5.3.2. Compile And Link</a></li>
<li><a href="#_many_sources">5.3.3. Many Sources</a></li>
</ul>
</li>
<li><a href="#_options">5.4. Options</a>
<ul class="sectlevel3">
<li><a href="#_source">5.4.1. Source</a></li>
<li><a href="#_output">5.4.2. Output</a></li>
<li><a href="#_include_directories">5.4.3. Include Directories</a></li>
<li><a href="#_library_directories">5.4.4. Library Directories</a></li>
<li><a href="#_define_preprocessor_symbols">5.4.5. Define Preprocessor Symbols</a></li>
<li><a href="#_undefine_preprocessor_symbols">5.4.6. Undefine Preprocessor Symbols</a></li>
<li><a href="#_language">5.4.7. Language</a></li>
<li><a href="#_optimization">5.4.8. Optimization</a></li>
<li><a href="#_vendor">5.4.9. Vendor</a></li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
<li><a href="#_wording">II: Wording</a>
<ul class="sectlevel1">
<li><a href="#_edit_1">6. Edit 1</a>
<ul class="sectlevel2">
<li><a href="#strctopt-core">6.1. Structured Core Options <span class="right">[strctopt.core]</span></a>
<ul class="sectlevel3">
<li><a href="#strctopt-core-pre">6.1.1. Preamble <span class="right">[strctopt.core.pre]</span></a></li>
<li><a href="#strctopt-core-src">6.1.2. Source <span class="right">[strctopt.core.src]</span></a></li>
<li><a href="#strctopt-core-out">6.1.3. Output <span class="right">[strctopt.core.out]</span></a></li>
<li><a href="#strctopt-core-incd">6.1.4. Include Directories <span class="right">[strctopt.core.incd]</span></a></li>
<li><a href="#strctopt-core-libd">6.1.5. Library Directories <span class="right">[strctopt.core.libd]</span></a></li>
<li><a href="#strctopt-core-def">6.1.6. Define Preprocessor Symbols <span class="right">[strctopt.core.def]</span></a></li>
<li><a href="#strctopt-core-undef">6.1.7. Undefine Preprocessor Symbols <span class="right">[strctopt.core.undef]</span></a></li>
<li><a href="#strctopt-core-opt">6.1.8. Optimization <span class="right">[strctopt.core.opt]</span></a></li>
<li><a href="#strctopt-core-vendor">6.1.9. Vendor <span class="right">[strctopt.core.vendor]</span></a></li>
<li><a href="#strctopt-core-lang">6.1.10. Language <span class="right">[strctopt.core.lang]</span></a></li>
<li><a href="#strctopt-core-kind">6.1.11. Kind <span class="right">[strctopt.core.kind]</span></a></li>
</ul>
</li>
</ul>
</li>
<li><a href="#_edit_2">7. Edit 2</a>
<ul class="sectlevel2">
<li><a href="#strctparam-json-schema-spec">7.1. JSON Schema Specification <span class="right">[strctparamjschm.spec]</span></a></li>
</ul>
</li>
<li><a href="#_edit_3">8. Edit 3</a>
<ul class="sectlevel2">
<li><a href="#strctopt-core-jschm-annex">8.1. Annex C</a>
<ul class="sectlevel3">
<li><a href="#strctopt-core-jschm">8.1.1. Structured Core Options JSON Schema <span class="right">[strctoptcorejschm]</span></a></li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
<li><a href="#_colophon">III: Colophon</a>
<ul class="sectlevel1">
<li><a href="#_license">9. License</a></li>
</ul>
</li>
</ul>
</div>
</div>
<div id="content">
<div id="preamble">
<div class="sectionbody">
<style>
/* Insertions: Marked by green underlined text. */

.sectionbody > div > .ins,
.sectionbody > .ins {
	text-decoration: underline solid green;
	text-underline-offset: 0.3em;
}

span.ins {
	text-decoration: underline solid green;
	text-underline-offset: 0.3em;
}

/* Deletions: Marked by red strikeout text. */

.sectionbody > div > .del {
	text-decoration: line-through solid red;
}

span.del {
	text-decoration: line-through solid red;
}

/* Rev-to-rev Change: Marked by blue sidebar, or squiggle text. */

.sectionbody div.chg {
	border-left: solid 0.2em blue;
	padding-left: 0.3em;
	margin-left: -0.5em;
}

span.chg {
	text-decoration: underline wavy blue;
}

/* Information Preamble: Table like indented. */

#preamble div.hdlist {
	margin-left: 40%;
}

#preamble div.hdlist td.hdlist1 {
	width: 8em;
	padding: 0;
}

#preamble div.hdlist td.hdlist2 p {
	margin-bottom: 0.25em;
}

/* Admonition Icons: Use simple, large, colored, glyphs for icons. Requires
specifying the caption symbol properties:

:caution-caption: ⚑
:important-caption: ‼
:note-caption: ℹ
:tip-caption: ☀
:warning-caption: ⚠
*/

.admonitionblock .icon .title {
	font-size: 2.5em;
	text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.5);
}

.caution .icon .title {
	color: rgba(192, 51, 0, 1);
}

.important .icon .title {
	color: rgba(192, 0, 0, 1);
}

.note .icon .title {
	color: rgba(26, 64, 128, 1);
}

.tip .icon .title {
	color: rgba(255, 192, 0, 1);
}

.warning .icon .title {
	color: rgba(192, 102, 0, 1);
}

/* ??? */

.def > .content :first-child {
	margin-left: 0;
}

.def > .content > * {
	margin-left: 3em;
}

/* SVG needs to be relative sized so that it doesn´t look too small or too large.
*/
.imageblock svg {
	width: 100% !important;
}

/* ToC wording tweaks.
*/

/* Don't show section tags in ToC. */
#toc .right {
	display: none;
}

/* Use plain admonition labels. */
.wording .admonitionblock .icon .title {
	font-size: inherit !important;
	text-shadow: inherit !important;
	color: inherit !important;
}
</style>
<div class="hdlist">
<table>
<tr>
<td class="hdlist1">
Document #: 
</td>
<td class="hdlist2">
<p>ISO/IEC/JTC1/SC22/WG21/P3335R2</p>
</td>
</tr>
<tr>
<td class="hdlist1">
Date: 
</td>
<td class="hdlist2">
<p>2024-10-15</p>
</td>
</tr>
<tr>
<td class="hdlist1">
Audience: 
</td>
<td class="hdlist2">
<p>SG15</p>
</td>
</tr>
<tr>
<td class="hdlist1">
Authors: 
</td>
<td class="hdlist2">
<p>René Ferdinand Rivera Morell</p>
</td>
</tr>
<tr>
<td class="hdlist1">
Reply-to: 
</td>
<td class="hdlist2">
<p><a href="mailto:grafikrobot@gmail.com">grafikrobot@gmail.com</a></p>
</td>
</tr>
<tr>
<td class="hdlist1">
Copyright: 
</td>
<td class="hdlist2">
<p>Copyright 2024 René Ferdinand Rivera Morell, Creative Commons Attribution 4.0 International License (CC BY 4.0)</p>
</td>
</tr>
</table>
</div>
</div>
</div>
<h1 id="_proposal" class="sect0"><a class="anchor" href="#_proposal"></a>I: Proposal</h1>
<div class="sect1">
<h2 id="_abstract"><a class="anchor" href="#_abstract"></a>1. Abstract</h2>
<div class="sectionbody">
<div class="paragraph">
<p>Specify a minimal set of core structured options
<sup class="footnote" id="_footnote_P3051">[<a id="_footnoteref_1" class="footnote" href="#_footnotedef_1" title="View footnote.">1</a>]</sup>
for C&#43;&#43; compiler front ends.</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_revision_history"><a class="anchor" href="#_revision_history"></a>2. Revision History</h2>
<div class="sectionbody">
<div class="sect2">
<h3 id="_revision_2_october_2024"><a class="anchor" href="#_revision_2_october_2024"></a>2.1. Revision 2 (October 2024)</h3>
<div class="paragraph">
<p>Added wording and corresponding JSON Schema changes.</p>
</div>
</div>
<div class="sect2">
<h3 id="_revision_1_september_2024"><a class="anchor" href="#_revision_1_september_2024"></a>2.2. Revision 1 (September 2024)</h3>
<div class="paragraph">
<p>Per feedback from telecon discussion: remove <code>debug</code> option, remove <code>safe</code>
optimization value, avoid file names as keys, use only singly-typed values.</p>
</div>
</div>
<div class="sect2">
<h3 id="_revision_0_july_2024"><a class="anchor" href="#_revision_0_july_2024"></a>2.3. Revision 0 (July 2024)</h3>
<div class="paragraph">
<p>Initial text.</p>
</div>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_motivation"><a class="anchor" href="#_motivation"></a>3. Motivation</h2>
<div class="sectionbody">
<div class="paragraph">
<p>Tools in the C&#43;&#43; ecosystem have dealt with using a myriad of different options
to invoke C&#43;&#43; compiler front ends for decades. Although we have found ways to
manage the variety it is advantageous to agree on a common language to reduce
the growing complexities that the variety creates.</p>
</div>
<div class="paragraph">
<p>Having a standard common set of structured options allows for:</p>
</div>
<div class="ulist">
<ul>
<li>
<p>Reuse of implementation by tools that interface with compiler front ends.</p>
</li>
<li>
<p>Wider adoption of tools that use, as consumers or producers, the common
options.</p>
</li>
<li>
<p>Lowers the barriers for unexperienced users as they have less to learn.</p>
</li>
<li>
<p>Can be a basis for other standards to form a common configuration vocabulary.</p>
</li>
</ul>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_scope"><a class="anchor" href="#_scope"></a>4. Scope</h2>
<div class="sectionbody">
<div class="paragraph">
<p>This proposal aims to specify a set of C&#43;&#43; compiler frontend <em>structured
options</em> <sup class="footnoteref">[<a class="footnote" href="#_footnotedef_1" title="View footnote.">1</a>]</sup> sufficient to build common C&#43;&#43; use cases. This
includes specifying both the names and semantics of the structured options.</p>
</div>
<div class="paragraph">
<p>This <strong>does not</strong> aim to standardize compiler frontend command line arguments.
Although vendors are free to adopt the names and semantics specified if they
wish. And we encourage such adoption.</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_design"><a class="anchor" href="#_design"></a>5. Design</h2>
<div class="sectionbody">
<div class="paragraph">
<p>The approach for the names and semantics of the options follows these goals:</p>
</div>
<div class="ulist">
<ul>
<li>
<p>Prefer widely used terms in current tools, not just C&#43;&#43; compiler front ends.</p>
</li>
<li>
<p>Use widely understood semantics.</p>
</li>
<li>
<p>Improve the structure of the data.</p>
</li>
</ul>
</div>
<div class="sect2">
<h3 id="_file_references"><a class="anchor" href="#_file_references"></a>5.1. File References</h3>
<div class="paragraph">
<p>In various places the options need to refer to file names and paths. And in
some of those instances it&#8217;s also possible to want to specify one or more
attributes to the file. For example when indicating the language for a source
file. We looked at various ways to achieve an arrangement to make that
specification both optional and future proof. After discussions a simple JSON
object with one required <code>name</code> key and string value for the path was chosen:</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="rouge highlight"><code data-lang="C&#43;&#43;">{
  "name": "file.ext"
}</code></pre>
</div>
</div>
<div class="paragraph">
<p>Other fields are possible depending in the context of the file reference. For
example to specify the <code>language</code> of a source file:</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="rouge highlight"><code data-lang="C&#43;&#43;">{
  "name": "main.cpp",
  "language": "c++"
}</code></pre>
</div>
</div>
<div class="admonitionblock note">
<table>
<tr>
<td class="icon">
<div class="title">ℹ</div>
</td>
<td class="content">
Previously we had proposed using a multi-stage scheme to simplify the
human editing of file references that allowed: a single string, an object with
string, or an object with objects.
Discussions pointed out difficulties in such dynamic parsing of values by some
JSON parsers.
</td>
</tr>
</table>
</div>
</div>
<div class="sect2">
<h3 id="_lists"><a class="anchor" href="#_lists"></a>5.2. Lists</h3>
<div class="paragraph">
<p>All lists are strictly JSON <code>array</code> values.</p>
</div>
<div class="admonitionblock note">
<table>
<tr>
<td class="icon">
<div class="title">ℹ</div>
</td>
<td class="content">
Previously we had proposed using a multi-stage scheme to simplify the
human editing of lists that allowed lists with a single value to be abbreviated
by the single value.
Discussions pointed out difficulties in such dynamic parsing of values by some
JSON parsers.
</td>
</tr>
</table>
</div>
</div>
<div class="sect2">
<h3 id="_examples"><a class="anchor" href="#_examples"></a>5.3. Examples</h3>
<div class="paragraph">
<p>Below are some examples that show a traditional command line invocation and
the corresponding structured options specification. The examples are meant to
be informational only to illustrate how the structured options <em>could</em> work.
As such they may include options that are <em>not</em> proposed in this document.
The example command line invocations may also contain some options that are not
present in the structured options. I.e. they are not meant to be a one-to-one
correspondence. Generally the examples where generated by running a <strong>real</strong>
build system and collecting the command lines it invokes.</p>
</div>
<div class="sect3">
<h4 id="_hello_world"><a class="anchor" href="#_hello_world"></a>5.3.1. Hello World</h4>
<div class="paragraph">
<p>This is the classic simplest C&#43;&#43; program with the twist that we want to
allow full debugging when running it.</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="rouge highlight"><code data-lang="shell"><span class="s2">"g++"</span> <span class="nt">-O0</span> <span class="nt">-fno-inline</span> <span class="nt">-Wall</span> <span class="nt">-g</span> <span class="nt">-static</span> <span class="s2">"hello.cpp"</span> <span class="nt">-o</span> <span class="s2">"hello"</span></code></pre>
</div>
</div>
<div class="listingblock">
<div class="content">
<pre class="rouge highlight"><code data-lang="shell"><span class="s2">"cl"</span> <span class="s2">"hello.cpp"</span> /Fehello <span class="nt">-TP</span> /EHs /GR /Z7 /Od /Ob0 /W3 /Op /MLd /DEBUG
  /subsystem:console</code></pre>
</div>
</div>
<div class="paragraph">
<p>Those invocations can be represented as a somewhat more meaningful structured
options. This specification is formulated to be a single cross-vendor object
by using a <code>vendor</code> specific section to represent options that only <code>msvc</code>
understands. And that other tools could ignore.</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="rouge highlight"><code data-lang="json"><span class="p">{</span><span class="w">
  </span><span class="nl">"source"</span><span class="p">:</span><span class="w"> </span><span class="p">[{</span><span class="w"> </span><span class="nl">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"hello.cpp"</span><span class="w"> </span><span class="p">}],</span><span class="w">
  </span><span class="nl">"output"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="w">
    </span><span class="p">{</span><span class="w">
      </span><span class="nl">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"hello"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"kind"</span><span class="p">:</span><span class="w"> </span><span class="s2">"exec"</span><span class="w">
    </span><span class="p">}</span><span class="w">
  </span><span class="p">],</span><span class="w">
  </span><span class="nl">"optimization"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
    </span><span class="nl">"compile"</span><span class="p">:</span><span class="w"> </span><span class="s2">"off"</span><span class="p">,</span><span class="w">
    </span><span class="nl">"inline"</span><span class="p">:</span><span class="w"> </span><span class="kc">false</span><span class="w">
  </span><span class="p">},</span><span class="w">
  </span><span class="nl">"warnings"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
    </span><span class="nl">"enable"</span><span class="p">:</span><span class="w"> </span><span class="s2">"all"</span><span class="w">
  </span><span class="p">},</span><span class="w">
  </span><span class="nl">"runtime"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
    </span><span class="nl">"multithread"</span><span class="p">:</span><span class="w"> </span><span class="kc">false</span><span class="p">,</span><span class="w">
    </span><span class="nl">"debug"</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="p">,</span><span class="w">
    </span><span class="nl">"static"</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="w">
  </span><span class="p">},</span><span class="w">
  </span><span class="nl">"vendor"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
    </span><span class="nl">"msvc"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
      </span><span class="nl">"subsystem"</span><span class="p">:</span><span class="w"> </span><span class="s2">"console"</span><span class="w">
    </span><span class="p">}</span><span class="w">
  </span><span class="p">}</span><span class="w">
</span><span class="p">}</span></code></pre>
</div>
</div>
</div>
<div class="sect3">
<h4 id="_compile_and_link"><a class="anchor" href="#_compile_and_link"></a>5.3.2. Compile And Link</h4>
<div class="paragraph">
<p>A single invocation that does everything is not particularly common, except as
basic textbook examples. Here we see the more common case of compiling to
produce an object file for the TU. Then linking to get the final executable.</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="rouge highlight"><code data-lang="shell"><span class="s2">"g++"</span> <span class="nt">--fPIC</span> <span class="nt">-O0</span> <span class="nt">-fno-inline</span> <span class="nt">-Wall</span> <span class="nt">-g</span> <span class="nt">-c</span> <span class="nt">-o</span> <span class="s2">"hello.o"</span> <span class="s2">"hello.cpp"</span>
<span class="s2">"g++"</span> <span class="nt">-g</span> <span class="s2">"hello.o"</span> <span class="nt">-o</span> <span class="s2">"hello"</span></code></pre>
</div>
</div>
<div class="paragraph">
<p>The compile only equivalent structured options:</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="rouge highlight"><code data-lang="json"><span class="p">{</span><span class="w">
  </span><span class="nl">"source"</span><span class="p">:</span><span class="w"> </span><span class="p">[{</span><span class="w"> </span><span class="nl">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"hello.cpp"</span><span class="w"> </span><span class="p">}],</span><span class="w">
  </span><span class="nl">"output"</span><span class="p">:</span><span class="w"> </span><span class="p">[{</span><span class="w"> </span><span class="nl">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"hello.o"</span><span class="p">,</span><span class="w"> </span><span class="nl">"kind"</span><span class="p">:</span><span class="w"> </span><span class="s2">"object"</span><span class="w"> </span><span class="p">}],</span><span class="w">
  </span><span class="nl">"optimization"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
    </span><span class="nl">"compile"</span><span class="p">:</span><span class="w"> </span><span class="s2">"off"</span><span class="p">,</span><span class="w">
    </span><span class="nl">"inline"</span><span class="p">:</span><span class="w"> </span><span class="kc">false</span><span class="w">
  </span><span class="p">},</span><span class="w">
  </span><span class="nl">"warnings"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
    </span><span class="nl">"enable"</span><span class="p">:</span><span class="w"> </span><span class="s2">"all"</span><span class="w">
  </span><span class="p">},</span><span class="w">
  </span><span class="nl">"runtime"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
    </span><span class="nl">"multithread"</span><span class="p">:</span><span class="w"> </span><span class="kc">false</span><span class="p">,</span><span class="w">
    </span><span class="nl">"debug"</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="p">,</span><span class="w">
    </span><span class="nl">"static"</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="w">
  </span><span class="p">}</span><span class="w">
</span><span class="p">}</span></code></pre>
</div>
</div>
<div class="paragraph">
<p>Followed by the structured options to accomplish the link:</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="rouge highlight"><code data-lang="json"><span class="p">{</span><span class="w">
  </span><span class="nl">"source"</span><span class="p">:</span><span class="w"> </span><span class="p">[{</span><span class="w"> </span><span class="nl">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"hello.o"</span><span class="w"> </span><span class="p">}],</span><span class="w">
  </span><span class="nl">"output"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="w">
    </span><span class="p">{</span><span class="w">
      </span><span class="nl">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"hello"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"kind"</span><span class="p">:</span><span class="w"> </span><span class="s2">"exec"</span><span class="w">
    </span><span class="p">}</span><span class="w">
  </span><span class="p">]</span><span class="w">
</span><span class="p">}</span></code></pre>
</div>
</div>
</div>
<div class="sect3">
<h4 id="_many_sources"><a class="anchor" href="#_many_sources"></a>5.3.3. Many Sources</h4>
<div class="paragraph">
<p>This is a single command B2 uses to bootstrap its engine on Linux with GCC, and
Windows with MSVC. This is a variation on a simple basic invocation that builds
many files with some extra options.</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="rouge highlight"><code data-lang="shell">g++ <span class="nt">-x</span> c++ <span class="nt">-std</span><span class="o">=</span>c++11 <span class="nt">-pthread</span> <span class="nt">-O2</span> <span class="nt">-s</span> <span class="nt">-DNDEBUG</span> bindjam.cpp builtins.cpp
  class.cpp command.cpp compile.cpp constants.cpp cwd.cpp debug.cpp
  debugger.cpp events.cpp execcmd.cpp execnt.cpp execunix.cpp filent.cpp
  filesys.cpp fileunix.cpp frames.cpp <span class="k">function</span>.cpp glob.cpp hash.cpp
  hcache.cpp hdrmacro.cpp headers.cpp jam_strings.cpp jam.cpp jamgram.cpp
  lists.cpp make.cpp make1.cpp md5.cpp mem.cpp modules.cpp native.cpp
  option.cpp output.cpp parse.cpp pathnt.cpp pathsys.cpp pathunix.cpp
  regexp.cpp rules.cpp scan.cpp search.cpp startup.cpp tasks.cpp
  timestamp.cpp value.cpp variable.cpp w32_getreg.cpp mod_command_db.cpp
  mod_db.cpp mod_jam_builtin.cpp mod_jam_class.cpp mod_jam_errors.cpp
  mod_jam_modules.cpp mod_order.cpp mod_path.cpp mod_property_set.cpp
  mod_regex.cpp mod_sequence.cpp mod_set.cpp mod_string.cpp mod_summary.cpp
  mod_sysinfo.cpp mod_version.cpp <span class="nt">-o</span> b2</code></pre>
</div>
</div>
<div class="paragraph">
<p>Other than many more files this example doesn&#8217;t differ much from the
<a href="#_hello_world">Hello World</a> example.</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="rouge highlight"><code data-lang="json"><span class="p">{</span><span class="w">
  </span><span class="nl">"source"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="w">
    </span><span class="p">{</span><span class="w"> </span><span class="nl">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"bindjam.cpp"</span><span class="w"> </span><span class="p">},</span><span class="w">
    </span><span class="p">{</span><span class="w"> </span><span class="nl">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"builtins.cpp"</span><span class="w"> </span><span class="p">},</span><span class="w">
    </span><span class="p">{</span><span class="w"> </span><span class="nl">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"class.cpp"</span><span class="w"> </span><span class="p">},</span><span class="w">
    </span><span class="p">{</span><span class="w"> </span><span class="nl">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"command.cpp"</span><span class="w"> </span><span class="p">},</span><span class="w">
    </span><span class="p">{</span><span class="w"> </span><span class="nl">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"compile.cpp"</span><span class="w"> </span><span class="p">},</span><span class="w">
    </span><span class="p">{</span><span class="w"> </span><span class="nl">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"constants.cpp"</span><span class="w"> </span><span class="p">},</span><span class="w">
    </span><span class="p">{</span><span class="w"> </span><span class="nl">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"cwd.cpp"</span><span class="w"> </span><span class="p">},</span><span class="w">
    </span><span class="p">{</span><span class="w"> </span><span class="nl">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"debug.cpp"</span><span class="w"> </span><span class="p">},</span><span class="w">
    </span><span class="p">{</span><span class="w"> </span><span class="nl">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"debugger.cpp"</span><span class="w"> </span><span class="p">},</span><span class="w">
    </span><span class="p">{</span><span class="w"> </span><span class="nl">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"events.cpp"</span><span class="w"> </span><span class="p">},</span><span class="w">
    </span><span class="p">{</span><span class="w"> </span><span class="nl">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"execcmd.cpp"</span><span class="w"> </span><span class="p">},</span><span class="w">
    </span><span class="p">{</span><span class="w"> </span><span class="nl">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"execnt.cpp"</span><span class="w"> </span><span class="p">},</span><span class="w">
    </span><span class="p">{</span><span class="w"> </span><span class="nl">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"execunix.cpp"</span><span class="w"> </span><span class="p">},</span><span class="w">
    </span><span class="p">{</span><span class="w"> </span><span class="nl">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"filent.cpp"</span><span class="w"> </span><span class="p">},</span><span class="w">
    </span><span class="p">{</span><span class="w"> </span><span class="nl">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"filesys.cpp"</span><span class="w"> </span><span class="p">},</span><span class="w">
    </span><span class="p">{</span><span class="w"> </span><span class="nl">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"fileunix.cpp"</span><span class="w"> </span><span class="p">},</span><span class="w">
    </span><span class="p">{</span><span class="w"> </span><span class="nl">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"frames.cpp"</span><span class="w"> </span><span class="p">},</span><span class="w">
    </span><span class="p">{</span><span class="w"> </span><span class="nl">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"function.cpp"</span><span class="w"> </span><span class="p">},</span><span class="w">
    </span><span class="p">{</span><span class="w"> </span><span class="nl">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"glob.cpp"</span><span class="w"> </span><span class="p">},</span><span class="w">
    </span><span class="p">{</span><span class="w"> </span><span class="nl">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"hash.cpp"</span><span class="w"> </span><span class="p">},</span><span class="w">
    </span><span class="p">{</span><span class="w"> </span><span class="nl">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"hcache.cpp"</span><span class="w"> </span><span class="p">},</span><span class="w">
    </span><span class="p">{</span><span class="w"> </span><span class="nl">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"hdrmacro.cpp"</span><span class="w"> </span><span class="p">},</span><span class="w">
    </span><span class="p">{</span><span class="w"> </span><span class="nl">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"headers.cpp"</span><span class="w"> </span><span class="p">},</span><span class="w">
    </span><span class="p">{</span><span class="w"> </span><span class="nl">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"jam_strings.cpp"</span><span class="w"> </span><span class="p">},</span><span class="w">
    </span><span class="p">{</span><span class="w"> </span><span class="nl">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"jam.cpp"</span><span class="w"> </span><span class="p">},</span><span class="w">
    </span><span class="p">{</span><span class="w"> </span><span class="nl">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"jamgram.cpp"</span><span class="w"> </span><span class="p">},</span><span class="w">
    </span><span class="p">{</span><span class="w"> </span><span class="nl">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"lists.cpp"</span><span class="w"> </span><span class="p">},</span><span class="w">
    </span><span class="p">{</span><span class="w"> </span><span class="nl">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"make.cpp"</span><span class="w"> </span><span class="p">},</span><span class="w">
    </span><span class="p">{</span><span class="w"> </span><span class="nl">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"make1.cpp"</span><span class="w"> </span><span class="p">},</span><span class="w">
    </span><span class="p">{</span><span class="w"> </span><span class="nl">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"md5.cpp"</span><span class="w"> </span><span class="p">},</span><span class="w">
    </span><span class="p">{</span><span class="w"> </span><span class="nl">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"mem.cpp"</span><span class="w"> </span><span class="p">},</span><span class="w">
    </span><span class="p">{</span><span class="w"> </span><span class="nl">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"modules.cpp"</span><span class="w"> </span><span class="p">},</span><span class="w">
    </span><span class="p">{</span><span class="w"> </span><span class="nl">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"native.cpp"</span><span class="w"> </span><span class="p">},</span><span class="w">
    </span><span class="p">{</span><span class="w"> </span><span class="nl">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"option.cpp"</span><span class="w"> </span><span class="p">},</span><span class="w">
    </span><span class="p">{</span><span class="w"> </span><span class="nl">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"output.cpp"</span><span class="w"> </span><span class="p">},</span><span class="w">
    </span><span class="p">{</span><span class="w"> </span><span class="nl">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"parse.cpp"</span><span class="w"> </span><span class="p">},</span><span class="w">
    </span><span class="p">{</span><span class="w"> </span><span class="nl">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"pathnt.cpp"</span><span class="w"> </span><span class="p">},</span><span class="w">
    </span><span class="p">{</span><span class="w"> </span><span class="nl">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"pathsys.cpp"</span><span class="w"> </span><span class="p">},</span><span class="w">
    </span><span class="p">{</span><span class="w"> </span><span class="nl">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"pathunix.cpp"</span><span class="w"> </span><span class="p">},</span><span class="w">
    </span><span class="p">{</span><span class="w"> </span><span class="nl">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"regexp.cpp"</span><span class="w"> </span><span class="p">},</span><span class="w">
    </span><span class="p">{</span><span class="w"> </span><span class="nl">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"rules.cpp"</span><span class="w"> </span><span class="p">},</span><span class="w">
    </span><span class="p">{</span><span class="w"> </span><span class="nl">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"scan.cpp"</span><span class="w"> </span><span class="p">},</span><span class="w">
    </span><span class="p">{</span><span class="w"> </span><span class="nl">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"search.cpp"</span><span class="w"> </span><span class="p">},</span><span class="w">
    </span><span class="p">{</span><span class="w"> </span><span class="nl">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"startup.cpp"</span><span class="w"> </span><span class="p">},</span><span class="w">
    </span><span class="p">{</span><span class="w"> </span><span class="nl">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"tasks.cpp"</span><span class="w"> </span><span class="p">},</span><span class="w">
    </span><span class="p">{</span><span class="w"> </span><span class="nl">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"timestamp.cpp"</span><span class="w"> </span><span class="p">},</span><span class="w">
    </span><span class="p">{</span><span class="w"> </span><span class="nl">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"value.cpp"</span><span class="w"> </span><span class="p">},</span><span class="w">
    </span><span class="p">{</span><span class="w"> </span><span class="nl">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"variable.cpp"</span><span class="w"> </span><span class="p">},</span><span class="w">
    </span><span class="p">{</span><span class="w"> </span><span class="nl">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"w32_getreg.cpp"</span><span class="w"> </span><span class="p">},</span><span class="w">
    </span><span class="p">{</span><span class="w"> </span><span class="nl">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"mod_command_db.cpp"</span><span class="w"> </span><span class="p">},</span><span class="w">
    </span><span class="p">{</span><span class="w"> </span><span class="nl">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"mod_db.cpp"</span><span class="w"> </span><span class="p">},</span><span class="w">
    </span><span class="p">{</span><span class="w"> </span><span class="nl">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"mod_jam_builtin.cpp"</span><span class="w"> </span><span class="p">},</span><span class="w">
    </span><span class="p">{</span><span class="w"> </span><span class="nl">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"mod_jam_class.cpp"</span><span class="w"> </span><span class="p">},</span><span class="w">
    </span><span class="p">{</span><span class="w"> </span><span class="nl">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"mod_jam_errors.cpp"</span><span class="w"> </span><span class="p">},</span><span class="w">
    </span><span class="p">{</span><span class="w"> </span><span class="nl">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"mod_jam_modules.cpp"</span><span class="w"> </span><span class="p">},</span><span class="w">
    </span><span class="p">{</span><span class="w"> </span><span class="nl">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"mod_order.cpp"</span><span class="w"> </span><span class="p">},</span><span class="w">
    </span><span class="p">{</span><span class="w"> </span><span class="nl">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"mod_path.cpp"</span><span class="w"> </span><span class="p">},</span><span class="w">
    </span><span class="p">{</span><span class="w"> </span><span class="nl">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"mod_property_set.cpp"</span><span class="w"> </span><span class="p">},</span><span class="w">
    </span><span class="p">{</span><span class="w"> </span><span class="nl">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"mod_regex.cpp"</span><span class="w"> </span><span class="p">},</span><span class="w">
    </span><span class="p">{</span><span class="w"> </span><span class="nl">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"mod_sequence.cpp"</span><span class="w"> </span><span class="p">},</span><span class="w">
    </span><span class="p">{</span><span class="w"> </span><span class="nl">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"mod_set.cpp"</span><span class="w"> </span><span class="p">},</span><span class="w">
    </span><span class="p">{</span><span class="w"> </span><span class="nl">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"mod_string.cpp"</span><span class="w"> </span><span class="p">},</span><span class="w">
    </span><span class="p">{</span><span class="w"> </span><span class="nl">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"mod_summary.cpp"</span><span class="w"> </span><span class="p">},</span><span class="w">
    </span><span class="p">{</span><span class="w"> </span><span class="nl">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"mod_sysinfo.cpp"</span><span class="w"> </span><span class="p">},</span><span class="w">
    </span><span class="p">{</span><span class="w"> </span><span class="nl">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"mod_version.cpp"</span><span class="w"> </span><span class="p">}</span><span class="w">
  </span><span class="p">],</span><span class="w">
  </span><span class="nl">"output"</span><span class="p">:</span><span class="w"> </span><span class="p">[{</span><span class="w"> </span><span class="nl">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"b2"</span><span class="p">,</span><span class="w"> </span><span class="nl">"kind"</span><span class="p">:</span><span class="w"> </span><span class="s2">"exec"</span><span class="w"> </span><span class="p">}],</span><span class="w">
  </span><span class="nl">"define"</span><span class="p">:</span><span class="w"> </span><span class="p">[{</span><span class="w"> </span><span class="nl">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"NDEBUG"</span><span class="w"> </span><span class="p">}],</span><span class="w">
  </span><span class="nl">"language"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
    </span><span class="nl">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"c++"</span><span class="p">,</span><span class="w">
    </span><span class="nl">"standard"</span><span class="p">:</span><span class="w"> </span><span class="s2">"11"</span><span class="w">
  </span><span class="p">},</span><span class="w">
  </span><span class="nl">"optimization"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
    </span><span class="nl">"compile"</span><span class="p">:</span><span class="w"> </span><span class="s2">"minimal"</span><span class="p">,</span><span class="w">
    </span><span class="nl">"link"</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="p">,</span><span class="w">
    </span><span class="nl">"msvc.global_data"</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="w">
  </span><span class="p">},</span><span class="w">
  </span><span class="nl">"runtime"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
    </span><span class="nl">"multithread"</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="p">,</span><span class="w">
    </span><span class="nl">"debug"</span><span class="p">:</span><span class="w"> </span><span class="kc">false</span><span class="p">,</span><span class="w">
    </span><span class="nl">"static"</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="w">
  </span><span class="p">}</span><span class="w">
</span><span class="p">}</span></code></pre>
</div>
</div>
<div class="listingblock">
<div class="content">
<pre class="rouge highlight"><code data-lang="shell"><span class="s2">"cl"</span> /nologo /MP /MT /TP /Feb2 /wd4996 /wd4675 /O2 /GL /EHsc /Zc:wchar_t /Gw
  <span class="nt">-DNDEBUG</span>  bindjam.cpp builtins.cpp class.cpp command.cpp compile.cpp
  constants.cpp cwd.cpp debug.cpp debugger.cpp events.cpp execcmd.cpp
  execnt.cpp execunix.cpp filent.cpp filesys.cpp fileunix.cpp frames.cpp
  <span class="k">function</span>.cpp glob.cpp hash.cpp hcache.cpp hdrmacro.cpp headers.cpp jam.cpp
  jamgram.cpp lists.cpp make.cpp make1.cpp md5.cpp mem.cpp modules.cpp
  native.cpp option.cpp output.cpp parse.cpp pathnt.cpp pathsys.cpp
  pathunix.cpp regexp.cpp rules.cpp scan.cpp search.cpp jam_strings.cpp
  startup.cpp tasks.cpp timestamp.cpp value.cpp variable.cpp w32_getreg.cpp
  mod_command_db.cpp mod_db.cpp mod_jam_builtin.cpp mod_jam_class.cpp
  mod_jam_errors.cpp mod_jam_modules.cpp mod_order.cpp mod_path.cpp
  mod_property_set.cpp mod_regex.cpp mod_sequence.cpp mod_set.cpp
  mod_string.cpp mod_summary.cpp mod_sysinfo.cpp mod_version.cpp
  /link kernel32.lib advapi32.lib user32.lib
  /MANIFEST:EMBED /MANIFESTINPUT:b2.exe.manifest</code></pre>
</div>
</div>
<div class="paragraph">
<p>The <code>msvc</code> equivalent has the addition of listing some system libraries and
the special Windows embedded manifest for the executable.</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="rouge highlight"><code data-lang="json"><span class="p">{</span><span class="w">
  </span><span class="nl">"source"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="w">
    </span><span class="p">{</span><span class="w"> </span><span class="nl">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"bindjam.cpp"</span><span class="w"> </span><span class="p">},</span><span class="w">
    </span><span class="p">{</span><span class="w"> </span><span class="nl">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"builtins.cpp"</span><span class="w"> </span><span class="p">},</span><span class="w">
    </span><span class="p">{</span><span class="w"> </span><span class="nl">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"class.cpp"</span><span class="w"> </span><span class="p">},</span><span class="w">
    </span><span class="p">{</span><span class="w"> </span><span class="nl">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"command.cpp"</span><span class="w"> </span><span class="p">},</span><span class="w">
    </span><span class="p">{</span><span class="w"> </span><span class="nl">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"compile.cpp"</span><span class="w"> </span><span class="p">},</span><span class="w">
    </span><span class="p">{</span><span class="w"> </span><span class="nl">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"constants.cpp"</span><span class="w"> </span><span class="p">},</span><span class="w">
    </span><span class="p">{</span><span class="w"> </span><span class="nl">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"cwd.cpp"</span><span class="w"> </span><span class="p">},</span><span class="w">
    </span><span class="p">{</span><span class="w"> </span><span class="nl">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"debug.cpp"</span><span class="w"> </span><span class="p">},</span><span class="w">
    </span><span class="p">{</span><span class="w"> </span><span class="nl">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"debugger.cpp"</span><span class="w"> </span><span class="p">},</span><span class="w">
    </span><span class="p">{</span><span class="w"> </span><span class="nl">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"events.cpp"</span><span class="w"> </span><span class="p">},</span><span class="w">
    </span><span class="p">{</span><span class="w"> </span><span class="nl">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"execcmd.cpp"</span><span class="w"> </span><span class="p">},</span><span class="w">
    </span><span class="p">{</span><span class="w"> </span><span class="nl">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"execnt.cpp"</span><span class="w"> </span><span class="p">},</span><span class="w">
    </span><span class="p">{</span><span class="w"> </span><span class="nl">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"execunix.cpp"</span><span class="w"> </span><span class="p">},</span><span class="w">
    </span><span class="p">{</span><span class="w"> </span><span class="nl">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"filent.cpp"</span><span class="w"> </span><span class="p">},</span><span class="w">
    </span><span class="p">{</span><span class="w"> </span><span class="nl">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"filesys.cpp"</span><span class="w"> </span><span class="p">},</span><span class="w">
    </span><span class="p">{</span><span class="w"> </span><span class="nl">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"fileunix.cpp"</span><span class="w"> </span><span class="p">},</span><span class="w">
    </span><span class="p">{</span><span class="w"> </span><span class="nl">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"frames.cpp"</span><span class="w"> </span><span class="p">},</span><span class="w">
    </span><span class="p">{</span><span class="w"> </span><span class="nl">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"function.cpp"</span><span class="w"> </span><span class="p">},</span><span class="w">
    </span><span class="p">{</span><span class="w"> </span><span class="nl">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"glob.cpp"</span><span class="w"> </span><span class="p">},</span><span class="w">
    </span><span class="p">{</span><span class="w"> </span><span class="nl">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"hash.cpp"</span><span class="w"> </span><span class="p">},</span><span class="w">
    </span><span class="p">{</span><span class="w"> </span><span class="nl">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"hcache.cpp"</span><span class="w"> </span><span class="p">},</span><span class="w">
    </span><span class="p">{</span><span class="w"> </span><span class="nl">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"hdrmacro.cpp"</span><span class="w"> </span><span class="p">},</span><span class="w">
    </span><span class="p">{</span><span class="w"> </span><span class="nl">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"headers.cpp"</span><span class="w"> </span><span class="p">},</span><span class="w">
    </span><span class="p">{</span><span class="w"> </span><span class="nl">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"jam_strings.cpp"</span><span class="w"> </span><span class="p">},</span><span class="w">
    </span><span class="p">{</span><span class="w"> </span><span class="nl">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"jam.cpp"</span><span class="w"> </span><span class="p">},</span><span class="w">
    </span><span class="p">{</span><span class="w"> </span><span class="nl">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"jamgram.cpp"</span><span class="w"> </span><span class="p">},</span><span class="w">
    </span><span class="p">{</span><span class="w"> </span><span class="nl">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"lists.cpp"</span><span class="w"> </span><span class="p">},</span><span class="w">
    </span><span class="p">{</span><span class="w"> </span><span class="nl">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"make.cpp"</span><span class="w"> </span><span class="p">},</span><span class="w">
    </span><span class="p">{</span><span class="w"> </span><span class="nl">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"make1.cpp"</span><span class="w"> </span><span class="p">},</span><span class="w">
    </span><span class="p">{</span><span class="w"> </span><span class="nl">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"md5.cpp"</span><span class="w"> </span><span class="p">},</span><span class="w">
    </span><span class="p">{</span><span class="w"> </span><span class="nl">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"mem.cpp"</span><span class="w"> </span><span class="p">},</span><span class="w">
    </span><span class="p">{</span><span class="w"> </span><span class="nl">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"modules.cpp"</span><span class="w"> </span><span class="p">},</span><span class="w">
    </span><span class="p">{</span><span class="w"> </span><span class="nl">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"native.cpp"</span><span class="w"> </span><span class="p">},</span><span class="w">
    </span><span class="p">{</span><span class="w"> </span><span class="nl">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"option.cpp"</span><span class="w"> </span><span class="p">},</span><span class="w">
    </span><span class="p">{</span><span class="w"> </span><span class="nl">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"output.cpp"</span><span class="w"> </span><span class="p">},</span><span class="w">
    </span><span class="p">{</span><span class="w"> </span><span class="nl">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"parse.cpp"</span><span class="w"> </span><span class="p">},</span><span class="w">
    </span><span class="p">{</span><span class="w"> </span><span class="nl">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"pathnt.cpp"</span><span class="w"> </span><span class="p">},</span><span class="w">
    </span><span class="p">{</span><span class="w"> </span><span class="nl">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"pathsys.cpp"</span><span class="w"> </span><span class="p">},</span><span class="w">
    </span><span class="p">{</span><span class="w"> </span><span class="nl">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"pathunix.cpp"</span><span class="w"> </span><span class="p">},</span><span class="w">
    </span><span class="p">{</span><span class="w"> </span><span class="nl">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"regexp.cpp"</span><span class="w"> </span><span class="p">},</span><span class="w">
    </span><span class="p">{</span><span class="w"> </span><span class="nl">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"rules.cpp"</span><span class="w"> </span><span class="p">},</span><span class="w">
    </span><span class="p">{</span><span class="w"> </span><span class="nl">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"scan.cpp"</span><span class="w"> </span><span class="p">},</span><span class="w">
    </span><span class="p">{</span><span class="w"> </span><span class="nl">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"search.cpp"</span><span class="w"> </span><span class="p">},</span><span class="w">
    </span><span class="p">{</span><span class="w"> </span><span class="nl">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"startup.cpp"</span><span class="w"> </span><span class="p">},</span><span class="w">
    </span><span class="p">{</span><span class="w"> </span><span class="nl">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"tasks.cpp"</span><span class="w"> </span><span class="p">},</span><span class="w">
    </span><span class="p">{</span><span class="w"> </span><span class="nl">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"timestamp.cpp"</span><span class="w"> </span><span class="p">},</span><span class="w">
    </span><span class="p">{</span><span class="w"> </span><span class="nl">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"value.cpp"</span><span class="w"> </span><span class="p">},</span><span class="w">
    </span><span class="p">{</span><span class="w"> </span><span class="nl">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"variable.cpp"</span><span class="w"> </span><span class="p">},</span><span class="w">
    </span><span class="p">{</span><span class="w"> </span><span class="nl">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"w32_getreg.cpp"</span><span class="w"> </span><span class="p">},</span><span class="w">
    </span><span class="p">{</span><span class="w"> </span><span class="nl">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"mod_command_db.cpp"</span><span class="w"> </span><span class="p">},</span><span class="w">
    </span><span class="p">{</span><span class="w"> </span><span class="nl">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"mod_db.cpp"</span><span class="w"> </span><span class="p">},</span><span class="w">
    </span><span class="p">{</span><span class="w"> </span><span class="nl">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"mod_jam_builtin.cpp"</span><span class="w"> </span><span class="p">},</span><span class="w">
    </span><span class="p">{</span><span class="w"> </span><span class="nl">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"mod_jam_class.cpp"</span><span class="w"> </span><span class="p">},</span><span class="w">
    </span><span class="p">{</span><span class="w"> </span><span class="nl">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"mod_jam_errors.cpp"</span><span class="w"> </span><span class="p">},</span><span class="w">
    </span><span class="p">{</span><span class="w"> </span><span class="nl">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"mod_jam_modules.cpp"</span><span class="w"> </span><span class="p">},</span><span class="w">
    </span><span class="p">{</span><span class="w"> </span><span class="nl">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"mod_order.cpp"</span><span class="w"> </span><span class="p">},</span><span class="w">
    </span><span class="p">{</span><span class="w"> </span><span class="nl">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"mod_path.cpp"</span><span class="w"> </span><span class="p">},</span><span class="w">
    </span><span class="p">{</span><span class="w"> </span><span class="nl">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"mod_property_set.cpp"</span><span class="w"> </span><span class="p">},</span><span class="w">
    </span><span class="p">{</span><span class="w"> </span><span class="nl">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"mod_regex.cpp"</span><span class="w"> </span><span class="p">},</span><span class="w">
    </span><span class="p">{</span><span class="w"> </span><span class="nl">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"mod_sequence.cpp"</span><span class="w"> </span><span class="p">},</span><span class="w">
    </span><span class="p">{</span><span class="w"> </span><span class="nl">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"mod_set.cpp"</span><span class="w"> </span><span class="p">},</span><span class="w">
    </span><span class="p">{</span><span class="w"> </span><span class="nl">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"mod_string.cpp"</span><span class="w"> </span><span class="p">},</span><span class="w">
    </span><span class="p">{</span><span class="w"> </span><span class="nl">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"mod_summary.cpp"</span><span class="w"> </span><span class="p">},</span><span class="w">
    </span><span class="p">{</span><span class="w"> </span><span class="nl">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"mod_sysinfo.cpp"</span><span class="w"> </span><span class="p">},</span><span class="w">
    </span><span class="p">{</span><span class="w"> </span><span class="nl">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"mod_version.cpp"</span><span class="w"> </span><span class="p">},</span><span class="w">
    </span><span class="p">{</span><span class="w"> </span><span class="nl">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"kernel32.lib"</span><span class="w"> </span><span class="p">},</span><span class="w">
    </span><span class="p">{</span><span class="w"> </span><span class="nl">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"advapi32.lib"</span><span class="w"> </span><span class="p">},</span><span class="w">
    </span><span class="p">{</span><span class="w"> </span><span class="nl">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"user32.lib"</span><span class="w"> </span><span class="p">}</span><span class="w">
  </span><span class="p">],</span><span class="w">
  </span><span class="nl">"output"</span><span class="p">:</span><span class="w"> </span><span class="p">[{</span><span class="w"> </span><span class="nl">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"b2"</span><span class="p">,</span><span class="w"> </span><span class="nl">"kind"</span><span class="p">:</span><span class="w"> </span><span class="s2">"exec"</span><span class="w"> </span><span class="p">}],</span><span class="w">
  </span><span class="nl">"define"</span><span class="p">:</span><span class="w"> </span><span class="p">[{</span><span class="w"> </span><span class="nl">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"NDEBUG"</span><span class="p">,</span><span class="w"> </span><span class="nl">"value"</span><span class="p">:</span><span class="w"> </span><span class="kc">null</span><span class="w"> </span><span class="p">}],</span><span class="w">
  </span><span class="nl">"language"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="nl">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"c++"</span><span class="p">,</span><span class="w"> </span><span class="nl">"standard"</span><span class="p">:</span><span class="w"> </span><span class="s2">"11"</span><span class="w"> </span><span class="p">},</span><span class="w">
  </span><span class="nl">"optimization"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
    </span><span class="nl">"compile"</span><span class="p">:</span><span class="w"> </span><span class="s2">"minimal"</span><span class="p">,</span><span class="w">
    </span><span class="nl">"link"</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="p">,</span><span class="w">
    </span><span class="nl">"msvc.global_data"</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="w">
  </span><span class="p">},</span><span class="w">
  </span><span class="nl">"runtime"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
    </span><span class="nl">"multithread"</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="p">,</span><span class="w">
    </span><span class="nl">"debug"</span><span class="p">:</span><span class="w"> </span><span class="kc">false</span><span class="p">,</span><span class="w">
    </span><span class="nl">"static"</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="w">
  </span><span class="p">},</span><span class="w">
  </span><span class="nl">"vendor"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
    </span><span class="nl">"msvc"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
      </span><span class="nl">"manifest"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
        </span><span class="nl">"source"</span><span class="p">:</span><span class="w"> </span><span class="s2">"b2.exe.manifest"</span><span class="p">,</span><span class="w">
        </span><span class="nl">"embed"</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="w">
      </span><span class="p">}</span><span class="w">
    </span><span class="p">}</span><span class="w">
  </span><span class="p">}</span><span class="w">
</span><span class="p">}</span></code></pre>
</div>
</div>
</div>
</div>
<div class="sect2">
<h3 id="_options"><a class="anchor" href="#_options"></a>5.4. Options</h3>
<div class="admonitionblock note">
<table>
<tr>
<td class="icon">
<div class="title">ℹ</div>
</td>
<td class="content">
In the tables below compiler drivers or front ends we list the
un-prefixed option name. And for build systems we list any abstraction for the
option. But importantly, we don&#8217;t list if the build system only allows for
specifying the raw option. As it doesn&#8217;t add any more information than what is
given for the compiler driver information.
</td>
</tr>
</table>
</div>
<div class="paragraph">
<p>The options specified below show first how the concept is specified in two kinds
of tools, compiler driver/front-ends and build systems. This is a small, but
hopefully representative, sampling of syntax and semantics. The tools
considered are:
MSVC,
<sup class="footnote">[<a id="_footnoteref_2" class="footnote" href="#_footnotedef_2" title="View footnote.">2</a>]</sup>
GCC,
<sup class="footnote">[<a id="_footnoteref_3" class="footnote" href="#_footnotedef_3" title="View footnote.">3</a>]</sup>
CMake,
<sup class="footnote">[<a id="_footnoteref_4" class="footnote" href="#_footnotedef_4" title="View footnote.">4</a>]</sup>
B2
<sup class="footnote">[<a id="_footnoteref_5" class="footnote" href="#_footnotedef_5" title="View footnote.">5</a>]</sup></p>
</div>
<div class="paragraph">
<p>And subsequently show the chosen key, value, and semantics of the option. The
schema for the value is explained in the value if it&#8217;s brief. But otherwise
defined in the semantics of each. As mentioned previously there can be multiple
value types for an option. Each of those is outlined to the extent that the
specific option allows (currently). The explanations of the options are not
exhaustively precise. That is left for future wording.</p>
</div>
<div class="sect3">
<h4 id="_source"><a class="anchor" href="#_source"></a>5.4.1. Source</h4>
<table class="tableblock frame-all grid-all stretch">
<colgroup>
<col style="width: 14.2857%;">
<col style="width: 28.5714%;">
<col style="width: 57.1429%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Tool</th>
<th class="tableblock halign-left valign-top">Name</th>
<th class="tableblock halign-left valign-top">Semantics</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">MSVC</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code><em>file</em></code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">A file specified as a regular argument is added as a source to process.</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">GCC</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code><em>file</em></code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">A file specified as a regular argument is added as a source to process.</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">CMake</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code><em>file</em></code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">A file specified as an argument to a target is added as a source to process.</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">B2</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code><em>file</em></code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">A file specified as an argument to a target is added as a source to process.</p></td>
</tr>
</tbody>
</table>
<div class="dlist">
<dl>
<dt class="hdlist1">Key</dt>
<dd>
<p>Use <code>std.source</code> or shortened <code>source</code>.</p>
</dd>
<dt class="hdlist1">Value</dt>
<dd>
<p>An <code>array</code> of <a href="#_source_object">Source Object</a> values.</p>
</dd>
<dt class="hdlist1">Semantics</dt>
<dd>
<p>Adds the sources given to the set of files to process.</p>
</dd>
<dt class="hdlist1">Merge Semantics</dt>
<dd>
<p>The sources in this specification are <em>appended</em> to any existing sources.</p>
</dd>
</dl>
</div>
<div class="sect4">
<h5 id="_source_object"><a class="anchor" href="#_source_object"></a>5.4.1.1. Source Object</h5>
<div class="paragraph">
<p>A source is specified as an <code>object</code> it consist of at minimum a <code>name</code> field
specifying the file name of the source. Other fields are optional. And, if
possible, the tool can inspect the source (or name) to determine values for
unspecified fields.</p>
</div>
<div class="dlist">
<dl>
<dt class="hdlist1"><code>name</code></dt>
<dd>
<p>The required file name of the source.</p>
</dd>
<dt class="hdlist1"><code>language</code></dt>
<dd>
<p>An optional <a href="#_language">Language</a> that the source contains.</p>
</dd>
<dt class="hdlist1"><code>kind</code></dt>
<dd>
<p>An optional value that indicates the kind of <a href="#_output">Output</a> that generated
the file.</p>
</dd>
</dl>
</div>
<div class="paragraph">
<p><strong>Examples</strong></p>
</div>
<div class="listingblock">
<div class="content">
<pre class="rouge highlight"><code data-lang="json"><span class="p">{</span><span class="w">
  </span><span class="nl">"source"</span><span class="p">:</span><span class="w"> </span><span class="p">[{</span><span class="w"> </span><span class="nl">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"main.cpp"</span><span class="p">,</span><span class="w"> </span><span class="nl">"language"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="nl">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"c++"</span><span class="w"> </span><span class="p">}</span><span class="w"> </span><span class="p">}]</span><span class="w">
</span><span class="p">}</span></code></pre>
</div>
</div>
<div class="listingblock">
<div class="content">
<pre class="rouge highlight"><code data-lang="json"><span class="p">{</span><span class="w">
  </span><span class="nl">"source"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="w">
    </span><span class="p">{</span><span class="w"> </span><span class="nl">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"main.cpp"</span><span class="w"> </span><span class="p">},</span><span class="w">
    </span><span class="p">{</span><span class="w"> </span><span class="nl">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"utils.cpp"</span><span class="w"> </span><span class="p">},</span><span class="w">
    </span><span class="p">{</span><span class="w"> </span><span class="nl">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"algo.cpp"</span><span class="w"> </span><span class="p">},</span><span class="w">
    </span><span class="p">{</span><span class="w"> </span><span class="nl">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"api.i"</span><span class="p">,</span><span class="w"> </span><span class="nl">"language"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="nl">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"c"</span><span class="w"> </span><span class="p">}</span><span class="w"> </span><span class="p">}</span><span class="w">
  </span><span class="p">]</span><span class="w">
</span><span class="p">}</span></code></pre>
</div>
</div>
</div>
</div>
<div class="sect3">
<h4 id="_output"><a class="anchor" href="#_output"></a>5.4.2. Output</h4>
<table class="tableblock frame-all grid-all stretch">
<colgroup>
<col style="width: 14.2857%;">
<col style="width: 28.5714%;">
<col style="width: 57.1429%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Tool</th>
<th class="tableblock halign-left valign-top">Name</th>
<th class="tableblock halign-left valign-top">Semantics</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">MSVC</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>FA</code>, <code>Fa</code>, <code>Fd</code>, <code>Fe</code>, <code>Fi</code>, <code>Fm</code>, <code>Fo</code>, <code>Fp</code>, <code>FR</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Set the name of the generated output. The option specifies the kind of
    output generated as: <code>FA</code>, <code>Fa</code> (assembly); <code>Fd</code> (debug); <code>Fe</code> (executable);
    <code>Fi</code> (preprocessed); <code>Fm</code> (mapfile); <code>Fo</code> (object); <code>Fp</code> (pch);
    <code>FR</code> (browser)</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">GCC</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>o</code>, along with <code>c</code>, <code>S</code>, and <code>E</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Sets the file to output with (<code>o</code>). And with the related options controls
    the kind of output to generate: <code>c</code> (compile &#8594; object),
    <code>S</code> (compile &#8594; assembly), <code>E</code> (preprocessed).</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">CMake</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>add_executable</code>, <code>add_library</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Defines a target for an executable or library.</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">B2</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>exe</code>, <code>obj</code>, <code>lib</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Defines a target of the given type: <code>exe</code> (executable), <code>obj</code> (object),
    <code>lib</code> (static or dynamic library).</p></td>
</tr>
</tbody>
</table>
<div class="dlist">
<dl>
<dt class="hdlist1">Key</dt>
<dd>
<p>Use <code>std.output</code> or shortened <code>output</code>.</p>
</dd>
<dt class="hdlist1">Value</dt>
<dd>
<p>An <code>array</code> of <a href="#_output_object">Output Object</a> values.</p>
</dd>
<dt class="hdlist1">Semantics</dt>
<dd>
<p>Specifies the output file, or files, to generate when processing the sources.</p>
</dd>
<dt class="hdlist1">Merge Semantics</dt>
<dd>
<p>The outputs in this specification are <em>appended</em> to any existing outputs.</p>
</dd>
</dl>
</div>
<div class="sect4">
<h5 id="_output_object"><a class="anchor" href="#_output_object"></a>5.4.2.1. Output Object</h5>
<div class="paragraph">
<p>A single output specifies an <code>object</code> consisting at minimum of the <code>name</code> and
<code>kind</code> fields. Other fields are optional. And, if possible, the tool can infer
the other fields as needed.</p>
</div>
<div class="dlist">
<dl>
<dt class="hdlist1"><code>name</code></dt>
<dd>
<p>The required file name of the output.</p>
</dd>
<dt class="hdlist1"><code>kind</code></dt>
<dd>
<p>The kind of output. The kind of output also indicates the
type of operation the tool will do. Possible kinds of outputs:</p>
<div class="dlist">
<dl>
<dt class="hdlist1"><code>exec</code></dt>
<dd>
<p>Links the compiled sources into an executable file.</p>
</dd>
<dt class="hdlist1"><code>object</code></dt>
<dd>
<p>Compiles the sources into a linkable object file.</p>
</dd>
<dt class="hdlist1"><code>dynamic_lib</code></dt>
<dd>
<p>Links the compiled sources into a dynamically loadable library.</p>
</dd>
<dt class="hdlist1"><code>archive_lib</code></dt>
<dd>
<p>Collects the compiled sources into an archive library of object
files.</p>
</dd>
</dl>
</div>
</dd>
</dl>
</div>
<div class="paragraph">
<p><strong>Examples</strong></p>
</div>
<div class="listingblock">
<div class="content">
<pre class="rouge highlight"><code data-lang="json"><span class="p">{</span><span class="w">
  </span><span class="nl">"output"</span><span class="p">:</span><span class="w"> </span><span class="p">[{</span><span class="w"> </span><span class="nl">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"a.out"</span><span class="p">,</span><span class="w"> </span><span class="nl">"kind"</span><span class="p">:</span><span class="w"> </span><span class="s2">"exec"</span><span class="w"> </span><span class="p">}]</span><span class="w">
</span><span class="p">}</span></code></pre>
</div>
</div>
</div>
</div>
<div class="sect3">
<h4 id="_include_directories"><a class="anchor" href="#_include_directories"></a>5.4.3. Include Directories</h4>
<table class="tableblock frame-all grid-all stretch">
<colgroup>
<col style="width: 14.2857%;">
<col style="width: 28.5714%;">
<col style="width: 57.1429%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Tool</th>
<th class="tableblock halign-left valign-top">Name</th>
<th class="tableblock halign-left valign-top">Semantics</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">MSVC</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>I</code>, <code>INCLUDE</code> env var</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Adds the directory to the include search list.</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">GCC</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>I</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Adds the directory to the include search list.</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">CMake</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>include_directories()</code> or <code>INCLUDE_DIRECTORIES</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Adds the directories to the include search list.</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">B2</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>include</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Adds the directory, order unspecified, to the include search list.</p></td>
</tr>
</tbody>
</table>
<div class="dlist">
<dl>
<dt class="hdlist1">Key</dt>
<dd>
<p>Use <code>std.include_dirs</code> or shortened <code>include_dirs</code>.</p>
</dd>
<dt class="hdlist1">Value</dt>
<dd>
<p>An <code>array</code> of <code>string</code>-s. Each <code>string</code> is a pathname of which interpretation
is up to the application.</p>
</dd>
<dt class="hdlist1">Semantics</dt>
<dd>
<p>Adds the listed pathnames to the end of the include directories of the
application. It is up to the application to interpret how the composed list of
directories is used. But it commonly interpreted as <code>#include</code> preprocessor
directives to look for files in the order of the include directories list.</p>
</dd>
<dt class="hdlist1">Merge Semantics</dt>
<dd>
<p>The directories in this specification are appended to any existing directories.</p>
</dd>
</dl>
</div>
<div class="paragraph">
<p><strong>Examples</strong></p>
</div>
<div class="listingblock">
<div class="content">
<pre class="rouge highlight"><code data-lang="json"><span class="p">{</span><span class="w">
  </span><span class="nl">"include_dirs"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="s2">"/opt/boost_config/include"</span><span class="p">,</span><span class="w"> </span><span class="s2">"/opt/openssl/include"</span><span class="p">]</span><span class="w">
</span><span class="p">}</span></code></pre>
</div>
</div>
</div>
<div class="sect3">
<h4 id="_library_directories"><a class="anchor" href="#_library_directories"></a>5.4.4. Library Directories</h4>
<table class="tableblock frame-all grid-all stretch">
<colgroup>
<col style="width: 14.2857%;">
<col style="width: 28.5714%;">
<col style="width: 57.1429%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Tool</th>
<th class="tableblock halign-left valign-top">Name</th>
<th class="tableblock halign-left valign-top">Semantics</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">MSVC</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>/link /LIBPATH:<em>dir</em></code> or <code>LIB</code> env var</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Adds to the list of directories to search for link libs. The <code>LIBPATH</code>
    paths are searched before the <code>LIB</code> paths.</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">GCC</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>L</code></p></td>
<td class="tableblock halign-left valign-top"></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">CMake</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>link_directories(AFTER/BEFORE &#8230;&#8203;)</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Adds to the list of directories which will be used by the linker to search
    for libraries. Specifying <code>AFTER</code> or <code>BEFORE</code> will append or prepend the
    given directories to the existing list of directories.</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">B2</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>library-path</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Adds to the list of directories which will be used by the linker to search
    for libraries.</p></td>
</tr>
</tbody>
</table>
<div class="dlist">
<dl>
<dt class="hdlist1">Key</dt>
<dd>
<p>Use <code>std.library_dirs</code> or shortened <code>library_dirs</code>.</p>
</dd>
<dt class="hdlist1">Value</dt>
<dd>
<p>An <code>array</code> of <code>string</code>-s. Each <code>string</code> is a pathname of which interpretation
is up to the application.</p>
</dd>
<dt class="hdlist1">Semantics</dt>
<dd>
<p>Adds the listed pathnames to the end of the library search directories of the
application. It is up to the application to interpret how the composed list of
directories is used.</p>
</dd>
<dt class="hdlist1">Merge Semantics</dt>
<dd>
<p>The directories in this specification are appended to any existing directories.</p>
</dd>
</dl>
</div>
<div class="paragraph">
<p><strong>Examples</strong></p>
</div>
<div class="listingblock">
<div class="content">
<pre class="rouge highlight"><code data-lang="json"><span class="p">{</span><span class="w">
  </span><span class="nl">"library_dirs"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="s2">"/opt/boost_config/lib"</span><span class="p">,</span><span class="w"> </span><span class="s2">"/opt/openssl/lib"</span><span class="p">]</span><span class="w">
</span><span class="p">}</span></code></pre>
</div>
</div>
</div>
<div class="sect3">
<h4 id="_define_preprocessor_symbols"><a class="anchor" href="#_define_preprocessor_symbols"></a>5.4.5. Define Preprocessor Symbols</h4>
<table class="tableblock frame-all grid-all stretch">
<colgroup>
<col style="width: 14.2857%;">
<col style="width: 28.5714%;">
<col style="width: 57.1429%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Tool</th>
<th class="tableblock halign-left valign-top">Name</th>
<th class="tableblock halign-left valign-top">Semantics</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">MSVC</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>D</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Defines a preprocessor symbol to a value overriding any previous definition.
  If no value is given <code>1</code> is used as the value.</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">GCC</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>D</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Defines a preprocessor symbol to a value overriding any previous definition.
  If no value is given <code>1</code> is used as the value.</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">CMake</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>add_compile_definitions</code>, <code>target_compile_definitions</code>, <code>COMPILE_DEFINITIONS</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Defines a preprocessor symbol to a value overriding any previous definition.
  If no value is given no value is used and the value is up to the compiler.</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">B2</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>define</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Defines a preprocessor symbol to a value overriding any previous definition.
  If no value is given no value is used and the value is up to the compiler.</p></td>
</tr>
</tbody>
</table>
<div class="dlist">
<dl>
<dt class="hdlist1">Key</dt>
<dd>
<p>Use <code>std.define</code> or shortened <code>define</code>.</p>
</dd>
<dt class="hdlist1">Value</dt>
<dd>
<p>An <code>array</code> of <a href="#_preprocessor_symbol">Preprocessor Symbol</a> values.</p>
</dd>
<dt class="hdlist1">Semantics</dt>
<dd>
<p>For each symbol a language preprocessor will define the symbol to the value.</p>
</dd>
<dt class="hdlist1">Merge Semantics</dt>
<dd>
<p>The definitions in this specification either: add to existing set of definitions
when the symbol doesn&#8217;t exist, or replace the definitions when the symbol
already exists.</p>
</dd>
</dl>
</div>
<div class="sect4">
<h5 id="_preprocessor_symbol"><a class="anchor" href="#_preprocessor_symbol"></a>5.4.5.1. Preprocessor Symbol</h5>
<div class="paragraph">
<p>A preprocessor symbol specifies a <code>name</code> and <code>value</code>. The <code>value</code> defined by the
preprocessor is converted as follows based on the type of JSON value given:</p>
</div>
<div class="ulist">
<ul>
<li>
<p>JSON <code>number</code> is converted to a string and pasted.</p>
</li>
<li>
<p>JSON <code>string</code> is used directly.</p>
</li>
<li>
<p>JSON <code>boolean</code> is converted as <code>true</code> &#8658; <code>1</code> and <code>false</code> &#8658; <code>0</code>.</p>
</li>
<li>
<p>JSON <code>null</code> converts to nothing, and hence the default implementation value
should be used.</p>
</li>
</ul>
</div>
<div class="paragraph">
<p><strong>Examples</strong></p>
</div>
<div class="listingblock">
<div class="content">
<pre class="rouge highlight"><code data-lang="json"><span class="p">{</span><span class="w">
  </span><span class="nl">"define"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="w">
    </span><span class="p">{</span><span class="w"> </span><span class="nl">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"BOOST_ALL_NO_LIB"</span><span class="p">,</span><span class="w"> </span><span class="nl">"value"</span><span class="p">:</span><span class="w"> </span><span class="mi">1</span><span class="w"> </span><span class="p">},</span><span class="w">
    </span><span class="p">{</span><span class="w"> </span><span class="nl">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"_WIN32_WINNT"</span><span class="p">,</span><span class="w"> </span><span class="nl">"value"</span><span class="p">:</span><span class="w"> </span><span class="s2">"0x0600"</span><span class="w"> </span><span class="p">},</span><span class="w">
    </span><span class="p">{</span><span class="w"> </span><span class="nl">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"_GNU_SOURCE"</span><span class="p">,</span><span class="w"> </span><span class="nl">"value"</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="w"> </span><span class="p">},</span><span class="w">
    </span><span class="p">{</span><span class="w"> </span><span class="nl">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"U_USING_ICU_NAMESPACE"</span><span class="p">,</span><span class="w"> </span><span class="nl">"value"</span><span class="p">:</span><span class="w"> </span><span class="kc">false</span><span class="w"> </span><span class="p">},</span><span class="w">
    </span><span class="p">{</span><span class="w"> </span><span class="nl">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"NOMINMAX"</span><span class="p">,</span><span class="w"> </span><span class="nl">"value"</span><span class="p">:</span><span class="w"> </span><span class="kc">null</span><span class="w"> </span><span class="p">}</span><span class="w">
  </span><span class="p">]</span><span class="w">
</span><span class="p">}</span></code></pre>
</div>
</div>
</div>
</div>
<div class="sect3">
<h4 id="_undefine_preprocessor_symbols"><a class="anchor" href="#_undefine_preprocessor_symbols"></a>5.4.6. Undefine Preprocessor Symbols</h4>
<table class="tableblock frame-all grid-all stretch">
<colgroup>
<col style="width: 14.2857%;">
<col style="width: 28.5714%;">
<col style="width: 57.1429%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Tool</th>
<th class="tableblock halign-left valign-top">Name</th>
<th class="tableblock halign-left valign-top">Semantics</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">MSVC</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>U</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Undefines the given preprocessor symbol.</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">GCC</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>U</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Undefines the given preprocessor symbol.</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">CMake</p></td>
<td class="tableblock halign-left valign-top"></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">N/A</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">B2</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>undef</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Undefines the given preprocessor symbol.</p></td>
</tr>
</tbody>
</table>
<div class="dlist">
<dl>
<dt class="hdlist1">Key</dt>
<dd>
<p>Use <code>std.undef</code> or shortened <code>undef</code>.</p>
</dd>
<dt class="hdlist1">Value</dt>
<dd>
<p>The option would be either a single <code>string</code> or an <code>array</code> of <code>string</code>-s. Each
<code>string</code> is a symbol to undefine.</p>
</dd>
<dt class="hdlist1">Semantics</dt>
<dd>
<p>For each <code>string</code> in the value "undefines" the preprocessor symbol. The option
is evaluated after the <code>define</code> option.</p>
</dd>
<dt class="hdlist1">Merge Semantics</dt>
<dd>
<p>The undefs in this specification either: add to existing set of undefs
when the symbol doesn&#8217;t exist, or replace the undefs when the symbol
already exists.</p>
</dd>
</dl>
</div>
<div class="listingblock">
<div class="content">
<pre class="rouge highlight"><code data-lang="json"><span class="p">{</span><span class="w">
  </span><span class="nl">"undef"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="s2">"NDEBUG"</span><span class="p">]</span><span class="w">
</span><span class="p">}</span></code></pre>
</div>
</div>
</div>
<div class="sect3">
<h4 id="_language"><a class="anchor" href="#_language"></a>5.4.7. Language</h4>
<table class="tableblock frame-all grid-all stretch">
<colgroup>
<col style="width: 14.2857%;">
<col style="width: 28.5714%;">
<col style="width: 57.1429%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Tool</th>
<th class="tableblock halign-left valign-top">Name</th>
<th class="tableblock halign-left valign-top">Semantics</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">MSVC</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>Tc</code>, <code>TC</code>, <code>Tp</code>, <code>TP</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Specified a source file is a C (<code>Tc</code> or <code>TC</code>) or C&#43;&#43; (<code>Tp</code> or <code>TP</code>) file.
  Otherwise the file extension is used.</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">GCC</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>x <em>language</em></code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Specified source files are the given language. Otherwise the file extension
  is used.</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">CMake</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>set_property(SOURCE <em>language</em> &#8230;&#8203;)</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Specified source files are the given language. Otherwise the file extension
  is used.</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">B2</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>[ cast _ <em>language</em> : &#8230;&#8203; ]</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Specified source files are the given language. Otherwise the file extension
  is used.</p></td>
</tr>
</tbody>
</table>
<div class="dlist">
<dl>
<dt class="hdlist1">Key</dt>
<dd>
<p>Use <code>std.language</code> or shortened <code>language</code>.</p>
</dd>
<dt class="hdlist1">Value</dt>
<dd>
<p>The option value is a single <code>string</code> indicating the name of a language.
The set of values is open. But at minimum <code>c++</code> and <code>c</code> must be recognized.
Other values could be: <code>assembly</code>, <code>objective-c</code>, <code>objective-c++</code>, <code>fortran</code>,
<code>go</code>, <code>d</code>, <code>ada</code>.</p>
</dd>
<dt class="hdlist1">Semantics</dt>
<dd>
<p>The given language sets the one to use for sources that do not otherwise
specify one. The tool should indicate an error for languages it doesn&#8217;t
recognize.</p>
</dd>
</dl>
</div>
<div class="listingblock">
<div class="content">
<pre class="rouge highlight"><code data-lang="json"><span class="p">{</span><span class="w">
  </span><span class="nl">"language"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="nl">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"c++"</span><span class="w"> </span><span class="p">}</span><span class="w">
</span><span class="p">}</span></code></pre>
</div>
</div>
<div class="dlist">
<dl>
<dt class="hdlist1">Merge Semantics</dt>
<dd>
<p>The language in this specification replaces an existing language specification.</p>
</dd>
</dl>
</div>
</div>
<div class="sect3">
<h4 id="_optimization"><a class="anchor" href="#_optimization"></a>5.4.8. Optimization</h4>
<table class="tableblock frame-all grid-all stretch">
<colgroup>
<col style="width: 14.2857%;">
<col style="width: 28.5714%;">
<col style="width: 57.1429%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Tool</th>
<th class="tableblock halign-left valign-top">Name</th>
<th class="tableblock halign-left valign-top">Semantics</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">MSVC</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>Od</code>, <code>O1</code>, <code>O2</code>, <code>Os</code>, <code>Ot</code>, <code>Ox</code>, and more</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Disables (<code>Od</code>) or enables (the rest) code generation optimizations.</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">GCC</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>O0</code>, <code>O1</code>, <code>O2</code>, <code>O3</code>, <code>Os</code>, <code>Og</code>, <code>Oz</code>, and more</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Disables (<code>O0</code>) or enables (the rest) code generation optimizations.</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">CMake</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>DCMAKE_BUILD_TYPE=Release</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Generates build description that may enable optimizations.</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">B2</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>&lt;optimization&gt;off</code>, <code>&lt;optimization&gt;minimal</code>, <code>&lt;optimization&gt;speed</code>,
    <code>&lt;optimization&gt;space</code>, <code>&lt;optimization&gt;debug</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Disables (<code>off</code>) or enables (the rest) code generation optimizations for
    the targets it&#8217;s applied to.</p></td>
</tr>
</tbody>
</table>
<div class="dlist">
<dl>
<dt class="hdlist1">Key</dt>
<dd>
<p>Use <code>std.optimization</code> or shortened <code>optimization</code>.</p>
</dd>
<dt class="hdlist1">Value</dt>
<dd>
<p>An <a href="#_optimization_object">Optimization Object</a>.</p>
</dd>
<dt class="hdlist1">Semantics</dt>
<dd>
<p>The level of optimization is applied to all the sources being processed.</p>
</dd>
<dt class="hdlist1">Merge Semantics</dt>
<dd>
<p>The fields in the <code>object</code> value replace existing optimization fields. For
a single <code>string</code> value the equivalent <code>object</code> for that value is merged.</p>
</dd>
</dl>
</div>
<div class="paragraph">
<p><strong>Examples</strong></p>
</div>
<div class="listingblock">
<div class="content">
<pre class="rouge highlight"><code data-lang="json"><span class="p">{</span><span class="w">
  </span><span class="nl">"optimization"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="nl">"compile"</span><span class="p">:</span><span class="w"> </span><span class="s2">"minimal"</span><span class="w"> </span><span class="p">}</span><span class="w">
</span><span class="p">}</span></code></pre>
</div>
</div>
<div class="sect4">
<h5 id="_optimization_object"><a class="anchor" href="#_optimization_object"></a>5.4.8.1. Optimization Object</h5>
<div class="paragraph">
<p>An optimization object can have the following fields:</p>
</div>
<div class="paragraph">
<p>If the value is an <code>object</code> it can have the following fields, and semantics:</p>
</div>
<div class="dlist">
<dl>
<dt class="hdlist1"><code>compile</code></dt>
<dd>
<p>The set of values for <code>compile</code> is fixed, but tools are free to ignore
or use equivalent for the various values. Which optimizations the tool performs
for each value is up to the tool. The only required semantic is for <code>off</code> that
must disable all optimizations. Possible values:<br></p>
<div class="ulist">
<ul>
<li>
<p><code>off</code> - Disable optimizations.</p>
</li>
<li>
<p><code>minimal</code> - Optimizations that may improve speed and space.</p>
</li>
<li>
<p><code>speed</code> - Prefer speed over space optimizations.</p>
</li>
<li>
<p><code>space</code> - Prefer smaller binaries over speed optimizations.</p>
</li>
<li>
<p><code>debug</code> - Optimize such that debugging capabilities are preserved.</p>
</li>
</ul>
</div>
</dd>
<dt class="hdlist1"><code>link</code></dt>
<dd>
<p>A <code>boolean</code> value that when <code>true</code> enables link time (whole program)
optimizations. When <code>false</code>, or not present, disables link time optimizations.</p>
</dd>
</dl>
</div>
</div>
</div>
<div class="sect3">
<h4 id="_vendor"><a class="anchor" href="#_vendor"></a>5.4.9. Vendor</h4>
<div class="paragraph">
<p>We recognize that <code>std</code> options will never be sufficient, or practical, to
delineate all possible functionality. To accommodate the flexibility needed
over time to support all build capabilities we need to allow for tools to
define their own options outside of the standard. While it is possible for tools
to use scoped keys to specify their own options, that method may be harder to
manage for some environments. To allow for easier destructuring we introduce
a <code>vendor</code> option.</p>
</div>
<div class="dlist">
<dl>
<dt class="hdlist1">Key</dt>
<dd>
<p>Use <code>std.vendor</code> or shortened <code>vendor</code>.</p>
</dd>
<dt class="hdlist1">Value</dt>
<dd>
<p>The option contains a single <code>object</code> with tool defined keys and values. The
names of the keys, or the type of the values, or the semantics are not
specified here. And it is up to the tool creators to coordinate on unique
keys.</p>
</dd>
<dt class="hdlist1">Semantics</dt>
<dd>
<p>The value in the vendor specific fields is interpreted per the tool
requirements. Any number of vendor keys+values is allowed. Tools are not
restricted in what they support. Either of their own keys+values. Or the
Keys+values of other vendor tools. This allows from some level of interchange
for tools that need to support some understanding of what other tools specify.
For example static analyzers that often need to digest sources across different
vendors.</p>
</dd>
<dt class="hdlist1">Merge Semantics</dt>
<dd>
<p>The semantics are up to the vendor to specify for the individual options they
define. Above that, if a vendor key in this specification is not present in the
existing specification it is added. Otherwise, for a key in the vendor <code>object</code>
in this specification is not present in the existing specification it is added.</p>
</dd>
</dl>
</div>
<div class="paragraph">
<p><strong>Examples</strong></p>
</div>
<div class="listingblock">
<div class="content">
<pre class="rouge highlight"><code data-lang="json"><span class="p">{</span><span class="w">
  </span><span class="nl">"optimization"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
    </span><span class="nl">"compile"</span><span class="p">:</span><span class="w"> </span><span class="s2">"debug"</span><span class="p">,</span><span class="w">
    </span><span class="nl">"link"</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="p">,</span><span class="w">
    </span><span class="nl">"vendor"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
      </span><span class="nl">"msvc"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
        </span><span class="nl">"global_data"</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="w">
      </span><span class="p">}</span><span class="w">
    </span><span class="p">}</span><span class="w">
  </span><span class="p">},</span><span class="w">
  </span><span class="nl">"vendor"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
    </span><span class="nl">"msvc"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
      </span><span class="nl">"manifest"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
        </span><span class="nl">"source"</span><span class="p">:</span><span class="w"> </span><span class="s2">"b2.exe.manifest"</span><span class="p">,</span><span class="w">
        </span><span class="nl">"embed"</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="w">
      </span><span class="p">},</span><span class="w">
      </span><span class="nl">"subsystem"</span><span class="p">:</span><span class="w"> </span><span class="s2">"console"</span><span class="w">
    </span><span class="p">}</span><span class="w">
  </span><span class="p">}</span><span class="w">
</span><span class="p">}</span></code></pre>
</div>
</div>
</div>
</div>
</div>
</div>
<h1 id="_wording" class="sect0"><a class="anchor" href="#_wording"></a>II: Wording</h1>
<div class="openblock partintro">
<div class="content">
<div class="paragraph">
<p>Wording is relative to P3342R0 Working Draft, Standard for C&#43;&#43; Ecosystem.
<sup class="footnote" id="_footnote_P3342R0">[<a id="_footnoteref_6" class="footnote" href="#_footnotedef_6" title="View footnote.">6</a>]</sup></p>
</div>
<div class="paragraph">
<p>An important goal in the wording below is to minimize how much application
behavior is mandated. As specifying more than absolutely needed can impede
current and future behavior of applications.</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_edit_1"><a class="anchor" href="#_edit_1"></a>6. Edit 1</h2>
<div class="sectionbody">
<div class="paragraph">
<p>Replace <em>7 Structured Parameters Core Options</em> ([strctparamopt]) with
[<a href="#strctopt-core">strctopt.core</a>] below.</p>
</div>
<div class="sect2 text-justify">
<h3 id="strctopt-core"><a class="anchor" href="#strctopt-core"></a>6.1. Structured Core Options <span class="right">[<a href="#strctopt-core">strctopt.core</a>]</span></h3>
<div class="sect3">
<h4 id="strctopt-core-pre"><a class="anchor" href="#strctopt-core-pre"></a>6.1.1. Preamble <span class="right">[<a href="#strctopt-core-pre">strctopt.core.pre</a>]</span></h4>
<div class="paragraph">
<p>This clause describes the schema and semantics of core structured options
<span class="iref">([strctopt.schema.struct])</span> for C&#43;&#43; compiler front-end applications.</p>
</div>
<div class="paragraph">
<p>This clause specifies the <code>std.strctopt.core</code> capability
<span class="iref">([intspct.cap])</span> version <code>1.0.0</code>.</p>
</div>
<div class="paragraph">
<p>An application can implement this capability.</p>
</div>
<div class="paragraph">
<p>An application that implements the <code>std.strctopt.core</code> capability shall include
the <code>std.strctopt.core</code> field and version value in the introspection JSON
text output <span class="iref">([intspct.schema.cap])</span>.</p>
</div>
</div>
<div class="sect3 text-justify">
<h4 id="strctopt-core-src"><a class="anchor" href="#strctopt-core-src"></a>6.1.2. Source <span class="right">[<a href="#strctopt-core-src">strctopt.core.src</a>]</span></h4>
<div class="paragraph itemdescr">
<p><span class="fldname"><em>Name</em>:</span> <code>std.source</code> or <code>source</code><br>
<span class="fldtype"><em>Type</em>:</span> <code>array</code><br>
<span class="fldval"><em>Value</em>:</span> The value shall be a JSON <code>array</code>. The items in the <code>array</code>
  shall be of JSON <code>object</code> items specifying source objects
  <a href="#strctopt-core-srcobj">([strctopt.core.srcobj])</a>.<br>
<span class="flddesc"><em>Description</em>:</span>
  Defines a list of source files for an application to process.</p>
</div>
<div class="paragraph">
<p>The application shall add the given sources to the set of files to process.</p>
</div>
<div class="paragraph">
<p>The sources given shall be appended to existing sources in the order given.</p>
</div>
<div class="sect4 text-justify">
<h5 id="strctopt-core-srcobj"><a class="anchor" href="#strctopt-core-srcobj"></a>6.1.2.1. Source Object <span class="right">[<a href="#strctopt-core-srcobj">strctopt.core.srcobj</a>]</span></h5>
<div class="paragraph">
<p>A source object shall have a <code>name</code> field.</p>
</div>
<div class="paragraph itemdescr">
<p><span class="fldname"><em>Name</em>:</span> <code>std.name</code> or <code>name</code><br>
<span class="fldtype"><em>Type</em>:</span> <code>string</code><br>
<span class="fldval"><em>Value</em>:</span> A pathname to a file.<br>
<span class="flddesc"><em>Description</em>:</span> The pathname of the source file.</p>
</div>
<div class="paragraph">
<p>A source object can have a language field
<a href="#strctopt-core-lang">([strctopt.core.lang])</a>.</p>
</div>
<div class="paragraph">
<p>Specifying a language field for a source shall replace any other
determination of the source language by the application.</p>
</div>
<div class="paragraph">
<p>Specifying a language field for a source shall replace a language field
specified in the structured parameters options field
<span class="iref">([strctparam.schema.opts])</span>.</p>
</div>
<div class="paragraph">
<p>A source object can have a kind field
<a href="#strctopt-core-kind">([strctopt.core.kind])</a>.</p>
</div>
<div class="paragraph">
<p>Specifying a kind field for a source shall replace any other
determination of the source kind by the application.</p>
</div>
<div class="paragraph">
<p>Specifying a kind field for a source shall replace a kind field
specified in the structured parameters options field
<span class="iref">([strctparam.schema.opts])</span>.</p>
</div>
<div class="paragraph">
<p>A source object can have a vendor field
<a href="#strctopt-core-vendor">([strctopt.core.vendor])</a>.</p>
</div>
</div>
</div>
<div class="sect3 text-justify">
<h4 id="strctopt-core-out"><a class="anchor" href="#strctopt-core-out"></a>6.1.3. Output <span class="right">[<a href="#strctopt-core-out">strctopt.core.out</a>]</span></h4>
<div class="paragraph itemdescr">
<p><span class="fldname"><em>Name</em>:</span> <code>std.output</code> or <code>output</code><br>
<span class="fldtype"><em>Type</em>:</span> <code>array</code><br>
<span class="fldval"><em>Value</em>:</span> The value shall be a JSON <code>array</code>. The items in the <code>array</code>
  shall be JSON <code>object</code> items specifying output objects
  <a href="#strctopt-core-outobj">([strctopt-core-outobj])</a>.<br>
<span class="flddesc"><em>Description</em>:</span>
  Specifies the output files to generated when processing sources
  <a href="#strctopt-core-src">([strctopt.core.src])</a>.</p>
</div>
<div class="sect4 text-justify">
<h5 id="strctopt-core-outobj"><a class="anchor" href="#strctopt-core-outobj"></a>6.1.3.1. Output Object <span class="right">[<a href="#strctopt-core-outobj">strctopt.core.outobj</a>]</span></h5>
<div class="paragraph">
<p>An output object shall have a <code>name</code> field.</p>
</div>
<div class="paragraph itemdescr">
<p><span class="fldname"><em>Name</em>:</span> <code>std.name</code> or <code>name</code><br>
<span class="fldtype"><em>Type</em>:</span> <code>string</code><br>
<span class="fldval"><em>Value</em>:</span> A pathname to a file.<br>
<span class="flddesc"><em>Description</em>:</span> The name of the output file.</p>
</div>
<div class="paragraph">
<p>An output object can have a kind field
<a href="#strctopt-core-kind">([strctopt.core.kind])</a>.</p>
</div>
<div class="paragraph">
<p>Specifying a kind field for output shall replace any other
determination of the output kind by the application.</p>
</div>
<div class="paragraph">
<p>An output object can have a vendor field
<a href="#strctopt-core-vendor">([strctopt.core.vendor])</a>.</p>
</div>
</div>
</div>
<div class="sect3 text-justify">
<h4 id="strctopt-core-incd"><a class="anchor" href="#strctopt-core-incd"></a>6.1.4. Include Directories <span class="right">[<a href="#strctopt-core-incd">strctopt.core.incd</a>]</span></h4>
<div class="paragraph itemdescr">
<p><span class="fldname"><em>Name</em>:</span> <code>std.include_dirs</code> or <code>include_dirs</code><br>
<span class="fldtype"><em>Type</em>:</span> <code>array</code><br>
<span class="fldval"><em>Value</em>:</span> The value shall be a JSON <code>array</code>. The items in the <code>array</code>
  shall be JSON <code>string</code> items of pathnames to directories.<br>
<span class="flddesc"><em>Description</em>:</span>
  One or more entries to directories that are searched by the header inclusion
  of a C&#43;&#43; preprocessor.</p>
</div>
<div class="paragraph">
<p>The application shall add the given directories to the set of directories
searched by the header inclusion of a C&#43;&#43; preprocessor.</p>
</div>
<div class="paragraph">
<p>The directories given shall be appended to the existing include search
directories in the order given.</p>
</div>
</div>
<div class="sect3 text-justify">
<h4 id="strctopt-core-libd"><a class="anchor" href="#strctopt-core-libd"></a>6.1.5. Library Directories <span class="right">[<a href="#strctopt-core-libd">strctopt.core.libd</a>]</span></h4>
<div class="paragraph itemdescr">
<p><span class="fldname"><em>Name</em>:</span> <code>std.library_dirs</code> or <code>library_dirs</code><br>
<span class="fldtype"><em>Type</em>:</span> <code>array</code><br>
<span class="fldval"><em>Value</em>:</span> The value shall be a JSON <code>array</code>. The items in the <code>array</code>
  shall be JSON <code>string</code> items of pathnames to directories.<br>
<span class="flddesc"><em>Description</em>:</span>
  One or more entries to directories that are searched for libraries.</p>
</div>
<div class="paragraph">
<p>The application shall add the given directories to the set of directories
searched for libraries.</p>
</div>
<div class="paragraph">
<p>The directories given shall be appended to the existing library search
directories in the order given.</p>
</div>
</div>
<div class="sect3 text-justify">
<h4 id="strctopt-core-def"><a class="anchor" href="#strctopt-core-def"></a>6.1.6. Define Preprocessor Symbols <span class="right">[<a href="#strctopt-core-def">strctopt.core.def</a>]</span></h4>
<div class="paragraph itemdescr">
<p><span class="fldname"><em>Name</em>:</span> <code>std.define</code> or <code>define</code><br>
<span class="fldtype"><em>Type</em>:</span> <code>array</code><br>
<span class="fldval"><em>Value</em>:</span> The value shall be a JSON <code>array</code>. The items in the <code>array</code>
  shall be JSON <code>object</code> items specifying preprocessor symbol definition
  objects <a href="#strctopt-core-def-sym">([strctopt.core.def.sym])</a>.<br>
<span class="flddesc"><em>Description</em>:</span>
  Specifies preprocessor symbols to define during processing of sources.</p>
</div>
<div class="sect4 text-justify">
<h5 id="strctopt-core-def-sym"><a class="anchor" href="#strctopt-core-def-sym"></a>6.1.6.1. Preprocessor Symbol Definition Object <span class="right">[<a href="#strctopt-core-def-sym">strctopt.core.def.sym</a>]</span></h5>
<div class="paragraph itemdescr">
<p><span class="fldname"><em>Name</em>:</span> <code>std.name</code> or <code>name</code><br>
<span class="fldtype"><em>Type</em>:</span> <code>string</code><br>
<span class="fldval"><em>Value</em>:</span> A valid preprocessor symbol.<br>
<span class="flddesc"><em>Description</em>:</span>
  The field specifies the preprocessor symbol to define.</p>
</div>
<div class="paragraph">
<p>The symbol shall be valid for the consuming application.</p>
</div>
<div class="paragraph">
<p>The application shall indicate an error for invalid symbols.</p>
</div>
<div class="paragraph itemdescr">
<p><span class="fldname"><em>Name</em>:</span> <code>std.value</code> or <code>value</code><br>
<span class="fldtype"><em>Type</em>:</span> <code>number</code>, <code>string</code>, <code>boolean</code>, or <code>null</code><br>
<span class="fldval"><em>Value</em>:</span> A valid preprocessor define value.<br>
<span class="flddesc"><em>Description</em>:</span>
  The field specifies the value to assign to the preprocessor symbol.</p>
</div>
<div class="paragraph">
<p>The value shall be valid for the consuming application.</p>
</div>
<div class="paragraph">
<p>A <code>number</code> value shall be converted to a string value.</p>
</div>
<div class="paragraph">
<p>A `string`value shall be used as given.</p>
</div>
<div class="paragraph">
<p>A <code>true</code> value shall be converted to a string value of <code>1</code>.</p>
</div>
<div class="paragraph">
<p>A <code>false</code> value shall be converted to a string value of <code>0</code>.</p>
</div>
<div class="paragraph">
<p>A <code>null</code> value shall not convert and the application default value will be used.</p>
</div>
</div>
</div>
<div class="sect3 text-justify">
<h4 id="strctopt-core-undef"><a class="anchor" href="#strctopt-core-undef"></a>6.1.7. Undefine Preprocessor Symbols <span class="right">[<a href="#strctopt-core-undef">strctopt.core.undef</a>]</span></h4>
<div class="paragraph itemdescr">
<p><span class="fldname"><em>Name</em>:</span> <code>std.undef</code> or <code>undef</code><br>
<span class="fldtype"><em>Type</em>:</span> <code>array</code><br>
<span class="fldval"><em>Value</em>:</span> The value shall be a JSON <code>array</code>. The items in the <code>array</code>
  shall be of JSON <code>string</code> defining preprocessor symbol names.<br>
<span class="flddesc"><em>Description</em>:</span> Specifies preprocessor symbols to "undefine".</p>
</div>
<div class="paragraph">
<p>The symbols shall be valid for the consuming application.</p>
</div>
<div class="paragraph">
<p>The application shall indicate an error for invalid symbols.</p>
</div>
<div class="paragraph">
<p>The application shall evaluate this option after any <code>std.define</code>
<a href="#strctopt-core-def">([strctopt.core.def])</a> options.</p>
</div>
</div>
<div class="sect3 text-justify">
<h4 id="strctopt-core-opt"><a class="anchor" href="#strctopt-core-opt"></a>6.1.8. Optimization <span class="right">[<a href="#strctopt-core-opt">strctopt.core.opt</a>]</span></h4>
<div class="paragraph itemdescr">
<p><span class="fldname"><em>Name</em>:</span> <code>std.optimization</code> or <code>optimization</code><br>
<span class="fldtype"><em>Type</em>:</span> <code>string</code><br>
<span class="fldval"><em>Value</em>:</span> An optimization object item
  <a href="#strcopt-core-optojb">([strctopt-core-optobj])</a><br>
<span class="flddesc"><em>Description</em>:</span> The optimization to apply when generating the output.</p>
</div>
<div class="paragraph">
<p>The application shall replace each existing field in the optimization object
<a href="#strcopt-core-optojb">([strctopt-core-optobj])</a>.</p>
</div>
<div class="sect4 text-justify">
<h5 id="strctopt-core-optobj"><a class="anchor" href="#strctopt-core-optobj"></a>6.1.8.1. Optimization Object <span class="right">[<a href="#strctopt-core-optobj">strctopt.core.optobj</a>]</span></h5>
<div class="paragraph">
<p>An optimization object can have any of <code>compile</code> and <code>link</code> fields.</p>
</div>
<div class="paragraph itemdescr">
<p><span class="fldname"><em>Name</em>:</span> <code>compile</code><br>
<span class="fldtype"><em>Type</em>:</span> <code>string</code><br>
<span class="fldval"><em>Value</em>:</span> <code>off</code>, <code>minimal</code>, <code>speed</code>, <code>space</code>, or <code>debug</code><br>
<span class="flddesc"><em>Description</em>:</span>
  The amount or type of optimization to apply to the generated output.</p>
</div>
<div class="paragraph">
<p>An application shall not perform optimization when given the <code>off</code> value.</p>
</div>
<div class="paragraph">
<p>For <code>minimal</code>,<code>speed</code>, <code>space</code>, and <code>debug</code> values the application behavior is
unspecified.</p>
</div>
<div class="paragraph itemdescr">
<p><span class="fldname"><em>Name</em>:</span> <code>link</code><br>
<span class="fldtype"><em>Type</em>:</span> <code>boolean</code><br>
<span class="fldval"><em>Value</em>:</span> <code>true</code> or <code>false</code><br>
<span class="flddesc"><em>Description</em>:</span>
  Specify if optimizations that happen for linked output generation happen.</p>
</div>
<div class="paragraph">
<p>An application shall not perform optimizations for linked output generation
when the value is <code>false</code>.</p>
</div>
<div class="paragraph">
<p>For a <code>true</code> value the application behavior is unspecified.</p>
</div>
<div class="paragraph">
<p>An optimization object can have a vendor field
<a href="#strctopt-core-vendor">([strctopt.core.vendor])</a>.</p>
</div>
</div>
</div>
<div class="sect3 text-justify">
<h4 id="strctopt-core-vendor"><a class="anchor" href="#strctopt-core-vendor"></a>6.1.9. Vendor <span class="right">[<a href="#strctopt-core-vendor">strctopt.core.vendor</a>]</span></h4>
<div class="paragraph itemdescr">
<p><span class="fldname"><em>Name</em>:</span> <code>std.vendor</code> or <code>vendor</code><br>
<span class="fldtype"><em>Type</em>:</span> <code>object</code><br>
<span class="fldval"><em>Value</em>:</span> A vendor object
  <a href="#strctopt-core-vendorobj">strctopt.core.vendorobj</a><br>
<span class="flddesc"><em>Description</em>:</span>
  Specifies vendor defined options to apply in the context they appear.</p>
</div>
<div class="paragraph">
<p>An application shall apply the vendor option semantics in the context they
appear.</p>
</div>
<div class="sect4 text-justify">
<h5 id="strctopt-core-vendorobj"><a class="anchor" href="#strctopt-core-vendorobj"></a>6.1.9.1. Vendor Object <span class="right">[<a href="#strctopt-core-vendorobj">strctopt.core.vendorobj</a>]</span></h5>
<div class="paragraph">
<p>A vendor object can have any number of fields.</p>
</div>
<div class="paragraph">
<p>The name of a field is unspecified.</p>
</div>
<div class="paragraph">
<p>The value of a field is unspecified.</p>
</div>
<div class="admonitionblock note">
<table>
<tr>
<td class="icon">
<div class="title">ℹ</div>
</td>
<td class="content">
It is up to application vendors to agree on the name fields.
</td>
</tr>
</table>
</div>
<div class="admonitionblock note">
<table>
<tr>
<td class="icon">
<div class="title">ℹ</div>
</td>
<td class="content">
It is up to application vendors to document the schema of the field
values.
</td>
</tr>
</table>
</div>
</div>
</div>
<div class="sect3 text-justify">
<h4 id="strctopt-core-lang"><a class="anchor" href="#strctopt-core-lang"></a>6.1.10. Language <span class="right">[<a href="#strctopt-core-lang">strctopt.core.lang</a>]</span></h4>
<div class="paragraph itemdescr">
<p><span class="fldname"><em>Name</em>:</span> <code>language</code><br>
<span class="fldtype"><em>Type</em>:</span> <code>object</code><br>
<span class="fldval"><em>Value</em>:</span> A language object
  <a href="#strctopt-core-langobj">([strctop.core.langobj])</a><br>
<span class="flddesc"><em>Description</em>:</span> The language to interpret the source as.</p>
</div>
<div class="sect4 text-justify">
<h5 id="strctopt-core-langobj"><a class="anchor" href="#strctopt-core-langobj"></a>6.1.10.1. Language Object <span class="right">[<a href="#strctopt-core-langobj">strctopt.core.langobj</a>]</span></h5>
<div class="paragraph">
<p>A language object shall have a <code>name</code> field.</p>
</div>
<div class="paragraph itemdescr">
<p><span class="fldname"><em>Name</em>:</span> <code>std.name</code> or <code>name</code><br>
<span class="fldtype"><em>Type</em>:</span> <code>string</code><br>
<span class="fldval"><em>Value</em>:</span> One of: <code>c++</code> or an application defined value.<br>
<span class="flddesc"><em>Description</em>:</span> Specifies the source text language.</p>
</div>
<div class="paragraph">
<p>Only a value of <code>c++</code> specifies that source text
<a href="#strctopt-core-src">([strctopt.core.src])</a> is C&#43;&#43; ISO language.</p>
</div>
</div>
</div>
<div class="sect3 text-justify">
<h4 id="strctopt-core-kind"><a class="anchor" href="#strctopt-core-kind"></a>6.1.11. Kind <span class="right">[<a href="#strctopt-core-kind">strctopt.core.kind</a>]</span></h4>
<div class="paragraph itemdescr">
<p><span class="fldname"><em>Name</em>:</span> <code>kind</code><br>
<span class="fldtype"><em>Type</em>:</span> <code>string</code><br>
<span class="fldval"><em>Value</em>:</span> A kind item <a href="#strctopt-core-kind">([strctopt.core.kind])</a><br>
<span class="flddesc"><em>Description</em>:</span>
  The kind, or format, of the source file corresponding to the output
  file <a href="#strctopt-core-out">([strctopt.core.out])</a>.</p>
</div>
<div class="sect4 text-justify">
<h5 id="strctopt-core-kindobj"><a class="anchor" href="#strctopt-core-kindobj"></a>6.1.11.1. Kind Object <span class="right">[<a href="#strctopt-core-kindobj">strctopt.core.kindobj</a>]</span></h5>
<div class="paragraph itemdescr">
<p><span class="fldname"><em>Name</em>:</span> <code>std.name</code> or <code>name</code><br>
<span class="fldtype"><em>Type</em>:</span> <code>string</code><br>
<span class="fldval"><em>Value</em>:</span> One of: <code>text</code>, <code>exec</code>, <code>object</code>, <code>dynamic_lib</code>,
  <code>archive_lib</code><br>
<span class="flddesc"><em>Description</em>:</span> The kind, or format, of source and output files.</p>
</div>
<div class="paragraph">
<p>A <code>text</code> value specifies that the source or output is textual.</p>
</div>
<div class="paragraph">
<p>A <code>exec</code> value specifies that the source or output is an executable program.</p>
</div>
<div class="paragraph">
<p>A <code>object</code> value specifies that the source or output is a linkable object.</p>
</div>
<div class="paragraph">
<p>A <code>dynamic_lib</code> value specifies that the source or output is dynamically
linkable.</p>
</div>
<div class="paragraph">
<p>A <code>archive_lib</code> value specifies that the source or output is an archive, or
collection, of linkable objects.</p>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_edit_2"><a class="anchor" href="#_edit_2"></a>7. Edit 2</h2>
<div class="sectionbody">
<div class="paragraph">
<p>Replace <em>B.2 JSON Schema Specification</em> ([strctparamjschm.spec]) with
[<a href="#strctparam-json-schema-spec">strctparamjschm.spec</a>] below.</p>
</div>
<div class="sect2 text-justify">
<h3 id="strctparam-json-schema-spec"><a class="anchor" href="#strctparam-json-schema-spec"></a>7.1. JSON Schema Specification <span class="right">[<a href="#strctparam-json-schema-spec">strctparamjschm.spec</a>]</span></h3>
<div class="listingblock">
<div class="content">
<pre class="rouge highlight"><code data-lang="json"><span class="p">{</span><span class="w">
  </span><span class="nl">"$schema"</span><span class="p">:</span><span class="w"> </span><span class="s2">"https://json-schema.org/draft/2020-12/schema"</span><span class="p">,</span><span class="w">
  </span><span class="nl">"$id"</span><span class="p">:</span><span class="w"> </span><span class="s2">"std_param-1.0.0.json"</span><span class="p">,</span><span class="w">
  </span><span class="nl">"title"</span><span class="p">:</span><span class="w"> </span><span class="s2">"Structured Parameters Version 1.0.0 JSON Schema"</span><span class="p">,</span><span class="w">
  </span><span class="nl">"type"</span><span class="p">:</span><span class="w"> </span><span class="s2">"object"</span><span class="p">,</span><span class="w">
  </span><span class="nl">"properties"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
    </span><span class="nl">"$schema"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
      </span><span class="nl">"description"</span><span class="p">:</span><span class="w"> </span><span class="s2">"JSON Schema URI for the version of the structured parameters format."</span><span class="p">,</span><span class="w">
      </span><span class="nl">"type"</span><span class="p">:</span><span class="w"> </span><span class="s2">"string"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"format"</span><span class="p">:</span><span class="w"> </span><span class="s2">"uri"</span><span class="w">
    </span><span class="p">},</span><span class="w">
    </span><span class="nl">"version"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
      </span><span class="nl">"description"</span><span class="p">:</span><span class="w"> </span><span class="s2">"The Structured Parameters format version."</span><span class="p">,</span><span class="w">
      </span><span class="nl">"type"</span><span class="p">:</span><span class="w"> </span><span class="s2">"string"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"$ref"</span><span class="p">:</span><span class="w"> </span><span class="s2">"#/$defs/Version"</span><span class="w">
    </span><span class="p">}</span><span class="w">
  </span><span class="p">},</span><span class="w">
  </span><span class="nl">"patternProperties"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
    </span><span class="nl">"(std\\.)?arguments"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
      </span><span class="nl">"description"</span><span class="p">:</span><span class="w"> </span><span class="s2">"Application direct arguments."</span><span class="p">,</span><span class="w">
      </span><span class="nl">"type"</span><span class="p">:</span><span class="w"> </span><span class="s2">"array"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"items"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="nl">"type"</span><span class="p">:</span><span class="w"> </span><span class="s2">"string"</span><span class="w"> </span><span class="p">}</span><span class="w">
    </span><span class="p">},</span><span class="w">
    </span><span class="nl">"(std\\.)?options"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
      </span><span class="nl">"type"</span><span class="p">:</span><span class="w"> </span><span class="s2">"object"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"patternProperties"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
        </span><span class="nl">"(std\\.)?param"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="nl">"$ref"</span><span class="p">:</span><span class="w"> </span><span class="s2">"#/$defs/Std.Param"</span><span class="w"> </span><span class="p">},</span><span class="w">
        </span><span class="nl">"(std\\.)?source"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
          </span><span class="nl">"$ref"</span><span class="p">:</span><span class="w"> </span><span class="s2">"std_opt_core-1.0.0.json#/$defs/Std.Source"</span><span class="w">
        </span><span class="p">},</span><span class="w">
        </span><span class="nl">"(std\\.)?output"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
          </span><span class="nl">"$ref"</span><span class="p">:</span><span class="w"> </span><span class="s2">"std_opt_core-1.0.0.json#/$defs/Std.Output"</span><span class="w">
        </span><span class="p">},</span><span class="w">
        </span><span class="nl">"(std\\.)?include_dirs"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
          </span><span class="nl">"$ref"</span><span class="p">:</span><span class="w"> </span><span class="s2">"std_opt_core-1.0.0.json#/$defs/Std.IncludeDirs"</span><span class="w">
        </span><span class="p">},</span><span class="w">
        </span><span class="nl">"(std\\.)?library_dirs"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
          </span><span class="nl">"$ref"</span><span class="p">:</span><span class="w"> </span><span class="s2">"std_opt_core-1.0.0.json#/$defs/Std.LibraryDirs"</span><span class="w">
        </span><span class="p">},</span><span class="w">
        </span><span class="nl">"(std\\.)?define"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
          </span><span class="nl">"$ref"</span><span class="p">:</span><span class="w"> </span><span class="s2">"std_opt_core-1.0.0.json#/$defs/Std.Define"</span><span class="w">
        </span><span class="p">},</span><span class="w">
        </span><span class="nl">"(std\\.)?undef"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
          </span><span class="nl">"$ref"</span><span class="p">:</span><span class="w"> </span><span class="s2">"std_opt_core-1.0.0.json#/$defs/Std.Undef"</span><span class="w">
        </span><span class="p">},</span><span class="w">
        </span><span class="nl">"(std\\.)?language"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
          </span><span class="nl">"$ref"</span><span class="p">:</span><span class="w"> </span><span class="s2">"std_opt_core-1.0.0.json#/$defs/Std.Language"</span><span class="w">
        </span><span class="p">},</span><span class="w">
        </span><span class="nl">"(std\\.)?optimization"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
          </span><span class="nl">"$ref"</span><span class="p">:</span><span class="w"> </span><span class="s2">"std_opt_core-1.0.0.json#/$defs/Std.Optimization"</span><span class="w">
        </span><span class="p">},</span><span class="w">
        </span><span class="nl">"(std\\.)?vendor"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
          </span><span class="nl">"$ref"</span><span class="p">:</span><span class="w"> </span><span class="s2">"std_opt_core-1.0.0.json#/$defs/Std.Vendor"</span><span class="w">
        </span><span class="p">}</span><span class="w">
      </span><span class="p">}</span><span class="w">
    </span><span class="p">}</span><span class="w">
  </span><span class="p">},</span><span class="w">
  </span><span class="nl">"additionalProperties"</span><span class="p">:</span><span class="w"> </span><span class="kc">false</span><span class="p">,</span><span class="w">
  </span><span class="nl">"oneOf"</span><span class="p">:</span><span class="w"> </span><span class="p">[{</span><span class="w"> </span><span class="nl">"required"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="s2">"arguments"</span><span class="p">]</span><span class="w"> </span><span class="p">},</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="nl">"required"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="s2">"options"</span><span class="p">]</span><span class="w"> </span><span class="p">}],</span><span class="w">
  </span><span class="nl">"$defs"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
    </span><span class="nl">"Version"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
      </span><span class="nl">"type"</span><span class="p">:</span><span class="w"> </span><span class="s2">"string"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"pattern"</span><span class="p">:</span><span class="w"> </span><span class="s2">"^[0-9]+([.][0-9]+){0,2}$"</span><span class="w">
    </span><span class="p">},</span><span class="w">
    </span><span class="nl">"Name"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
      </span><span class="nl">"type"</span><span class="p">:</span><span class="w"> </span><span class="s2">"string"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"pattern"</span><span class="p">:</span><span class="w"> </span><span class="s2">"^([a-z0-9_-]+[.])*([a-z0-9_-]+)$"</span><span class="w">
    </span><span class="p">},</span><span class="w">
    </span><span class="nl">"StringOrArray"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
      </span><span class="nl">"type"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="s2">"string"</span><span class="p">,</span><span class="w"> </span><span class="s2">"array"</span><span class="p">],</span><span class="w">
      </span><span class="nl">"items"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="nl">"type"</span><span class="p">:</span><span class="w"> </span><span class="s2">"string"</span><span class="w"> </span><span class="p">}</span><span class="w">
    </span><span class="p">},</span><span class="w">
    </span><span class="nl">"Std.Param"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
      </span><span class="nl">"description"</span><span class="p">:</span><span class="w"> </span><span class="s2">"Recursive reference to one or more structured parameters files."</span><span class="p">,</span><span class="w">
      </span><span class="nl">"type"</span><span class="p">:</span><span class="w"> </span><span class="s2">"object"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"properties"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
        </span><span class="nl">"pre"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="nl">"$ref"</span><span class="p">:</span><span class="w"> </span><span class="s2">"#/$defs/StringOrArray"</span><span class="w"> </span><span class="p">},</span><span class="w">
        </span><span class="nl">"post"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="nl">"$ref"</span><span class="p">:</span><span class="w"> </span><span class="s2">"#/$defs/StringOrArray"</span><span class="w"> </span><span class="p">}</span><span class="w">
      </span><span class="p">},</span><span class="w">
      </span><span class="nl">"additionalProperties"</span><span class="p">:</span><span class="w"> </span><span class="kc">false</span><span class="w">
    </span><span class="p">}</span><span class="w">
  </span><span class="p">}</span><span class="w">
</span><span class="p">}</span></code></pre>
</div>
</div>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_edit_3"><a class="anchor" href="#_edit_3"></a>8. Edit 3</h2>
<div class="sectionbody">
<div class="paragraph">
<p>Insert [<a href="#strctopt-core-jschm-annex">strctoptcorejschm</a>] (below) after <em>Annex B</em>.</p>
</div>
<div class="sect2 ignore">
<h3 id="strctopt-core-jschm-annex"><a class="anchor" href="#strctopt-core-jschm-annex"></a>8.1. Annex C</h3>
<div class="sect3 infannex text-justify">
<h4 id="strctopt-core-jschm"><a class="anchor" href="#strctopt-core-jschm"></a>8.1.1. Structured Core Options JSON Schema <span class="right">[<a href="#strctopt-core-jschm">strctoptcorejschm</a>]</span></h4>
<div class="sect4">
<h5 id="strctopt-core-jschm-g"><a class="anchor" href="#strctopt-core-jschm-g"></a>8.1.1.1. General <span class="right">[<a href="#strctopt-core-jschm-g">strctoptcorejschm.general</a>]</span></h5>
<div class="paragraph">
<p>This Annex defines the structured parameter core options schema
<span class="iref">([<a href="#strctopt-core">strctopt.core</a>])</span> in terms os a <em>JSON Schema</em>.</p>
</div>
</div>
<div class="sect4">
<h5 id="strctopt-core-jschm-s"><a class="anchor" href="#strctopt-core-jschm-s"></a>8.1.1.2. JSON Schema Specification <span class="right">[<a href="#strctopt-core-jschm-s">strctoptcorejschm.spec</a>]</span></h5>
<div class="listingblock">
<div class="content">
<pre class="rouge highlight"><code data-lang="json"><span class="p">{</span><span class="w">
  </span><span class="nl">"$schema"</span><span class="p">:</span><span class="w"> </span><span class="s2">"https://json-schema.org/draft/2020-12/schema"</span><span class="p">,</span><span class="w">
  </span><span class="nl">"$id"</span><span class="p">:</span><span class="w"> </span><span class="s2">"std_opt_core-1.0.0"</span><span class="p">,</span><span class="w">
  </span><span class="nl">"title"</span><span class="p">:</span><span class="w"> </span><span class="s2">"Structured Core Options Version 1.0.0 JSON Schema"</span><span class="p">,</span><span class="w">
  </span><span class="nl">"patternProperties"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
    </span><span class="nl">"(std\\.)?source"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="nl">"$ref"</span><span class="p">:</span><span class="w"> </span><span class="s2">"#/$defs/Std.Source"</span><span class="w"> </span><span class="p">},</span><span class="w">
    </span><span class="nl">"(std\\.)?output"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="nl">"$ref"</span><span class="p">:</span><span class="w"> </span><span class="s2">"#/$defs/Std.Output"</span><span class="w"> </span><span class="p">},</span><span class="w">
    </span><span class="nl">"(std\\.)?include_dirs"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="nl">"$ref"</span><span class="p">:</span><span class="w"> </span><span class="s2">"#/$defs/Std.IncludeDirs"</span><span class="w"> </span><span class="p">},</span><span class="w">
    </span><span class="nl">"(std\\.)?library_dirs"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="nl">"$ref"</span><span class="p">:</span><span class="w"> </span><span class="s2">"#/$defs/Std.LibraryDirs"</span><span class="w"> </span><span class="p">},</span><span class="w">
    </span><span class="nl">"(std\\.)?define"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="nl">"$ref"</span><span class="p">:</span><span class="w"> </span><span class="s2">"#/$defs/Std.Define"</span><span class="w"> </span><span class="p">},</span><span class="w">
    </span><span class="nl">"(std\\.)?undef"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="nl">"$ref"</span><span class="p">:</span><span class="w"> </span><span class="s2">"#/$defs/Std.Undef"</span><span class="w"> </span><span class="p">},</span><span class="w">
    </span><span class="nl">"(std\\.)?optimization"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="nl">"$ref"</span><span class="p">:</span><span class="w"> </span><span class="s2">"#/$defs/Std.Optimization"</span><span class="w"> </span><span class="p">},</span><span class="w">
    </span><span class="nl">"(std\\.)?vendor"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="nl">"$ref"</span><span class="p">:</span><span class="w"> </span><span class="s2">"#/$defs/Std.Vendor"</span><span class="w"> </span><span class="p">},</span><span class="w">
    </span><span class="nl">"(std\\.)?language"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="nl">"$ref"</span><span class="p">:</span><span class="w"> </span><span class="s2">"#/$defs/Std.Language"</span><span class="w"> </span><span class="p">},</span><span class="w">
    </span><span class="nl">"(std\\.)?kind"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="nl">"$ref"</span><span class="p">:</span><span class="w"> </span><span class="s2">"#/$defs/Std.Kind"</span><span class="w"> </span><span class="p">}</span><span class="w">
  </span><span class="p">},</span><span class="w">
  </span><span class="nl">"$defs"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
    </span><span class="nl">"Std.Source"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
      </span><span class="nl">"description"</span><span class="p">:</span><span class="w"> </span><span class="s2">"The source files to process."</span><span class="p">,</span><span class="w">
      </span><span class="nl">"type"</span><span class="p">:</span><span class="w"> </span><span class="s2">"array"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"items"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
        </span><span class="nl">"description"</span><span class="p">:</span><span class="w"> </span><span class="s2">"A file to process."</span><span class="p">,</span><span class="w">
        </span><span class="nl">"type"</span><span class="p">:</span><span class="w"> </span><span class="s2">"object"</span><span class="p">,</span><span class="w">
        </span><span class="nl">"patternProperties"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
          </span><span class="nl">"(std\\.)?name"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="nl">"type"</span><span class="p">:</span><span class="w"> </span><span class="s2">"string"</span><span class="w"> </span><span class="p">},</span><span class="w">
          </span><span class="nl">"(std\\.)?language"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="nl">"$ref"</span><span class="p">:</span><span class="w"> </span><span class="s2">"#/$defs/Std.Language"</span><span class="w"> </span><span class="p">},</span><span class="w">
          </span><span class="nl">"(std\\.)?kind"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="nl">"$ref"</span><span class="p">:</span><span class="w"> </span><span class="s2">"#/$defs/Std.Kind"</span><span class="w"> </span><span class="p">},</span><span class="w">
          </span><span class="nl">"(std\\.)?vendor"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="nl">"$ref"</span><span class="p">:</span><span class="w"> </span><span class="s2">"#/$defs/Std.Vendor"</span><span class="w"> </span><span class="p">}</span><span class="w">
        </span><span class="p">},</span><span class="w">
        </span><span class="nl">"additionalProperties"</span><span class="p">:</span><span class="w"> </span><span class="kc">false</span><span class="w">
      </span><span class="p">}</span><span class="w">
    </span><span class="p">},</span><span class="w">
    </span><span class="nl">"Std.Output"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
      </span><span class="nl">"description"</span><span class="p">:</span><span class="w"> </span><span class="s2">"The output files to generate."</span><span class="p">,</span><span class="w">
      </span><span class="nl">"type"</span><span class="p">:</span><span class="w"> </span><span class="s2">"array"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"items"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
        </span><span class="nl">"description"</span><span class="p">:</span><span class="w"> </span><span class="s2">"An output file."</span><span class="p">,</span><span class="w">
        </span><span class="nl">"type"</span><span class="p">:</span><span class="w"> </span><span class="s2">"object"</span><span class="p">,</span><span class="w">
        </span><span class="nl">"patternProperties"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
          </span><span class="nl">"(std\\.)?name"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="nl">"type"</span><span class="p">:</span><span class="w"> </span><span class="s2">"string"</span><span class="w"> </span><span class="p">},</span><span class="w">
          </span><span class="nl">"(std\\.)?kind"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="nl">"$ref"</span><span class="p">:</span><span class="w"> </span><span class="s2">"#/$defs/Std.Kind"</span><span class="w"> </span><span class="p">},</span><span class="w">
          </span><span class="nl">"(std\\.)?vendor"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="nl">"$ref"</span><span class="p">:</span><span class="w"> </span><span class="s2">"#/$defs/Std.Vendor"</span><span class="w"> </span><span class="p">}</span><span class="w">
        </span><span class="p">},</span><span class="w">
        </span><span class="nl">"additionalProperties"</span><span class="p">:</span><span class="w"> </span><span class="kc">false</span><span class="w">
      </span><span class="p">}</span><span class="w">
    </span><span class="p">},</span><span class="w">
    </span><span class="nl">"Std.IncludeDirs"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
      </span><span class="nl">"description"</span><span class="p">:</span><span class="w"> </span><span class="s2">"Include directories."</span><span class="p">,</span><span class="w">
      </span><span class="nl">"type"</span><span class="p">:</span><span class="w"> </span><span class="s2">"array"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"items"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="nl">"type"</span><span class="p">:</span><span class="w"> </span><span class="s2">"string"</span><span class="w"> </span><span class="p">}</span><span class="w">
    </span><span class="p">},</span><span class="w">
    </span><span class="nl">"Std.LibraryDirs"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
      </span><span class="nl">"description"</span><span class="p">:</span><span class="w"> </span><span class="s2">"Library directories."</span><span class="p">,</span><span class="w">
      </span><span class="nl">"type"</span><span class="p">:</span><span class="w"> </span><span class="s2">"array"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"items"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="nl">"type"</span><span class="p">:</span><span class="w"> </span><span class="s2">"string"</span><span class="w"> </span><span class="p">}</span><span class="w">
    </span><span class="p">},</span><span class="w">
    </span><span class="nl">"Std.Define"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
      </span><span class="nl">"description"</span><span class="p">:</span><span class="w"> </span><span class="s2">"Define preprocessor symbols."</span><span class="p">,</span><span class="w">
      </span><span class="nl">"type"</span><span class="p">:</span><span class="w"> </span><span class="s2">"array"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"items"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
        </span><span class="nl">"type"</span><span class="p">:</span><span class="w"> </span><span class="s2">"object"</span><span class="p">,</span><span class="w">
        </span><span class="nl">"patternProperties"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
          </span><span class="nl">"(std\\.)?name"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="nl">"type"</span><span class="p">:</span><span class="w"> </span><span class="s2">"string"</span><span class="w"> </span><span class="p">},</span><span class="w">
          </span><span class="nl">"(std\\.)?value"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
            </span><span class="nl">"type"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="s2">"number"</span><span class="p">,</span><span class="w"> </span><span class="s2">"integer"</span><span class="p">,</span><span class="w"> </span><span class="s2">"string"</span><span class="p">,</span><span class="w"> </span><span class="s2">"boolean"</span><span class="p">,</span><span class="w"> </span><span class="s2">"null"</span><span class="p">]</span><span class="w">
          </span><span class="p">}</span><span class="w">
        </span><span class="p">},</span><span class="w">
        </span><span class="nl">"additionalProperties"</span><span class="p">:</span><span class="w"> </span><span class="kc">false</span><span class="w">
      </span><span class="p">}</span><span class="w">
    </span><span class="p">},</span><span class="w">
    </span><span class="nl">"Std.Undef"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
      </span><span class="nl">"description"</span><span class="p">:</span><span class="w"> </span><span class="s2">"Undefine preprocessor symbols."</span><span class="p">,</span><span class="w">
      </span><span class="nl">"type"</span><span class="p">:</span><span class="w"> </span><span class="s2">"array"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"items"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="nl">"type"</span><span class="p">:</span><span class="w"> </span><span class="s2">"string"</span><span class="w"> </span><span class="p">}</span><span class="w">
    </span><span class="p">},</span><span class="w">
    </span><span class="nl">"Std.Language"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
      </span><span class="nl">"description"</span><span class="p">:</span><span class="w"> </span><span class="s2">"The language to interpret sources for."</span><span class="p">,</span><span class="w">
      </span><span class="nl">"type"</span><span class="p">:</span><span class="w"> </span><span class="s2">"object"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"patternProperties"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
        </span><span class="nl">"(std\\.)?name"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
          </span><span class="nl">"type"</span><span class="p">:</span><span class="w"> </span><span class="s2">"string"</span><span class="w">
        </span><span class="p">}</span><span class="w">
      </span><span class="p">}</span><span class="w">
    </span><span class="p">},</span><span class="w">
    </span><span class="nl">"Std.Optimization"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
      </span><span class="nl">"description"</span><span class="p">:</span><span class="w"> </span><span class="s2">"The optimizations to apply to different stages of the processing."</span><span class="p">,</span><span class="w">
      </span><span class="nl">"type"</span><span class="p">:</span><span class="w"> </span><span class="s2">"object"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"patternProperties"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
        </span><span class="nl">"(std\\.)?compile"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
          </span><span class="nl">"type"</span><span class="p">:</span><span class="w"> </span><span class="s2">"string"</span><span class="p">,</span><span class="w">
          </span><span class="nl">"enum"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="s2">"off"</span><span class="p">,</span><span class="w"> </span><span class="s2">"minimal"</span><span class="p">,</span><span class="w"> </span><span class="s2">"speed"</span><span class="p">,</span><span class="w"> </span><span class="s2">"space"</span><span class="p">,</span><span class="w"> </span><span class="s2">"debug"</span><span class="p">]</span><span class="w">
        </span><span class="p">},</span><span class="w">
        </span><span class="nl">"(std\\.)?link"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
          </span><span class="nl">"type"</span><span class="p">:</span><span class="w"> </span><span class="s2">"boolean"</span><span class="w">
        </span><span class="p">},</span><span class="w">
        </span><span class="nl">"(std\\.)?vendor"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="nl">"$ref"</span><span class="p">:</span><span class="w"> </span><span class="s2">"#/$defs/Std.Vendor"</span><span class="w"> </span><span class="p">}</span><span class="w">
      </span><span class="p">}</span><span class="w">
    </span><span class="p">},</span><span class="w">
    </span><span class="nl">"Std.Vendor"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
      </span><span class="nl">"description"</span><span class="p">:</span><span class="w"> </span><span class="s2">"Vendor defined specifications."</span><span class="p">,</span><span class="w">
      </span><span class="nl">"type"</span><span class="p">:</span><span class="w"> </span><span class="s2">"object"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"patterProperties"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
        </span><span class="nl">"^[a-z]+$"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
          </span><span class="nl">"type"</span><span class="p">:</span><span class="w"> </span><span class="s2">"object"</span><span class="w">
        </span><span class="p">}</span><span class="w">
      </span><span class="p">}</span><span class="w">
    </span><span class="p">},</span><span class="w">
    </span><span class="nl">"Std.Kind"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
      </span><span class="nl">"description"</span><span class="p">:</span><span class="w"> </span><span class="s2">"The kind of data a source of output is."</span><span class="p">,</span><span class="w">
      </span><span class="nl">"type"</span><span class="p">:</span><span class="w"> </span><span class="s2">"string"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"enum"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="s2">"text"</span><span class="p">,</span><span class="w"> </span><span class="s2">"exec"</span><span class="p">,</span><span class="w"> </span><span class="s2">"object"</span><span class="p">,</span><span class="w"> </span><span class="s2">"dynamic_lib"</span><span class="p">,</span><span class="w"> </span><span class="s2">"archive_lib"</span><span class="p">]</span><span class="w">
    </span><span class="p">}</span><span class="w">
  </span><span class="p">}</span><span class="w">
</span><span class="p">}</span></code></pre>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<h1 id="_colophon" class="sect0"><a class="anchor" href="#_colophon"></a>III: Colophon</h1>
<div class="sect1">
<h2 id="_license"><a class="anchor" href="#_license"></a>9. License</h2>
<div class="sectionbody">
<div class="paragraph">
<p>This work is licensed under the Creative Commons Attribution 4.0 International
License. To view a copy of this license, visit
<a href="http://creativecommons.org/licenses/by/4.0/" class="bare">http://creativecommons.org/licenses/by/4.0/</a> or send a letter to Creative
Commons, PO Box 1866, Mountain View, CA 94042, USA.</p>
</div>
</div>
</div>
</div>
<div id="footnotes">
<hr>
<div class="footnote" id="_footnotedef_1">
<a href="#_footnoteref_1">1</a>. P3051; Structured Response Files(<a href="https://wg21.link/P3051" class="bare">https://wg21.link/P3051</a>)
</div>
<div class="footnote" id="_footnotedef_2">
<a href="#_footnoteref_2">2</a>. MSVC, Compiler options listed by category (<a href="https://learn.microsoft.com/en-us/cpp/build/reference/compiler-options-listed-by-category" class="bare">https://learn.microsoft.com/en-us/cpp/build/reference/compiler-options-listed-by-category</a>)
</div>
<div class="footnote" id="_footnotedef_3">
<a href="#_footnoteref_3">3</a>. GCC Command Options (<a href="https://gcc.gnu.org/onlinedocs/gcc-14.1.0/gcc/Invoking-GCC.html" class="bare">https://gcc.gnu.org/onlinedocs/gcc-14.1.0/gcc/Invoking-GCC.html</a>)
</div>
<div class="footnote" id="_footnotedef_4">
<a href="#_footnoteref_4">4</a>. CMake Reference Documentation (<a href="https://cmake.org/cmake/help/latest/index.html" class="bare">https://cmake.org/cmake/help/latest/index.html</a>)
</div>
<div class="footnote" id="_footnotedef_5">
<a href="#_footnoteref_5">5</a>. B2 User Manual (<a href="https://www.bfgroup.xyz/b2/manual/release/index.html" class="bare">https://www.bfgroup.xyz/b2/manual/release/index.html</a>)
</div>
<div class="footnote" id="_footnotedef_6">
<a href="#_footnoteref_6">6</a>. P3342R0; Working Draft, Standard for C&#43;&#43; Ecosystem(<a href="https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2024/p3342r0.pdf" class="bare">https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2024/p3342r0.pdf</a>)
</div>
</div>
</body>
</html>