<html devsite>
<head>
  <meta name="project_path" value="/_project.yaml">
  <meta name="book_path" value="/versions/6.4.0/_book.yaml">
</head>
<body>

<h1 class="page-title" id="modules.cpp">cpp</h1>

<!-- {% raw %} -->

A configuration fragment for C++.

<h2>Members</h2>
<ul>
    <li>
    <a href="#apple_bitcode_mode">apple_bitcode_mode</a>
  </li>
      <li>
    <a href="#apple_generate_dsym">apple_generate_dsym</a>
  </li>
      <li>
    <a href="#conlyopts">conlyopts</a>
  </li>
      <li>
    <a href="#copts">copts</a>
  </li>
      <li>
    <a href="#custom_malloc">custom_malloc</a>
  </li>
      <li>
    <a href="#cxxopts">cxxopts</a>
  </li>
      <li>
    <a href="#linkopts">linkopts</a>
  </li>
      <li>
    <a href="#objc_generate_linkmap">objc_generate_linkmap</a>
  </li>
      <li>
    <a href="#objc_should_strip_binary">objc_should_strip_binary</a>
  </li>
      <li>
    <a href="#objccopts">objccopts</a>
  </li>
  </ul>

      <h2 id="apple_bitcode_mode">apple_bitcode_mode</h2>
        <p><pre class="rule-signature"><a class="anchor" href="apple_bitcode_mode.html">apple_bitcode_mode</a> cpp.apple_bitcode_mode</pre></p>

    Returns the Bitcode mode to use for compilation steps.<p>This field is only valid for Apple, and only for device builds; for simulator builds, it always returns <code>'none'</code>.


        <h2 id="apple_generate_dsym">apple_generate_dsym</h2>
        <p><pre class="rule-signature"><a class="anchor" href="bool.html">bool</a> cpp.apple_generate_dsym</pre></p>

    Whether to generate Apple debug symbol(.dSYM) artifacts.


        <h2 id="conlyopts">conlyopts</h2>
        <p><pre class="rule-signature"><a class="anchor" href="list.html">list</a> cpp.conlyopts</pre></p>

    The flags passed to Bazel by <a href="/versions/6.4.0/docs/user-manual#flag--conlyopt"><code>--conlyopt</code></a> option.


        <h2 id="copts">copts</h2>
        <p><pre class="rule-signature"><a class="anchor" href="list.html">list</a> cpp.copts</pre></p>

    The flags passed to Bazel by <a href="/versions/6.4.0/docs/user-manual#flag--copt"><code>--copt</code></a> option.


        <h2 id="custom_malloc">custom_malloc</h2>
        <p><pre class="rule-signature"><a class="anchor" href="Label.html">Label</a> cpp.custom_malloc</pre></p>

    Returns label pointed to by <a href="/versions/6.4.0/docs/user-manual#flag--custom_malloc"><code>--custom_malloc</code></a> option. Can be accessed with <a href="globals.html#configuration_field"><code>configuration_field</code></a>:<br/><pre>attr.label(<br/>    default = configuration_field(<br/>        fragment = "cpp",<br/>        name = "custom_malloc"<br/>    )<br/>)</pre>

         May return <code>None</code>.

        <h2 id="cxxopts">cxxopts</h2>
        <p><pre class="rule-signature"><a class="anchor" href="list.html">list</a> cpp.cxxopts</pre></p>

    The flags passed to Bazel by <a href="/versions/6.4.0/docs/user-manual#flag--cxxopt"><code>--cxxopt</code></a> option.


        <h2 id="linkopts">linkopts</h2>
        <p><pre class="rule-signature"><a class="anchor" href="list.html">list</a> cpp.linkopts</pre></p>

    The flags passed to Bazel by <a href="/versions/6.4.0/docs/user-manual#flag--linkopt"><code>--linkopt</code></a> option.


        <h2 id="objc_generate_linkmap">objc_generate_linkmap</h2>
        <p><pre class="rule-signature"><a class="anchor" href="bool.html">bool</a> cpp.objc_generate_linkmap</pre></p>

    (Apple-only) Whether to generate linkmap artifacts.


        <h2 id="objc_should_strip_binary">objc_should_strip_binary</h2>
        <p><pre class="rule-signature"><a class="anchor" href="bool.html">bool</a> cpp.objc_should_strip_binary</pre></p>

    (Apple-only) whether to perform symbol and dead-code strippings on linked binaries.


        <h2 id="objccopts">objccopts</h2>
        <p><pre class="rule-signature"><a class="anchor" href="list.html">list</a> cpp.objccopts</pre></p>

    The flags passed to Bazel by <a href="/versions/6.4.0/docs/user-manual#flag--objccopt"><code>--objccopt</code></a> option.



</body>
</html>

<!-- {% endraw %} -->
