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

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

{% dynamic setvar source_file "src/main/java/com/google/devtools/build/lib/starlarkbuildapi/cpp/CppConfigurationApi.java" %}
{% dynamic setvar version "8.2.0" %}
{% dynamic setvar original_path "/rules/lib/fragments/cpp" %}
{% include "_buttons.html" %}
<!-- {% raw %} -->

A configuration fragment for C++.

<h2>Members</h2>
<ul>
    <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_generate_dsym">apple_generate_dsym</h2>
        <p><pre class="rule-signature"><a class="anchor" href="../core/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="../core/list.html">list</a> cpp.conlyopts</pre></p>

    The flags passed to Bazel by <a href="/versions/8.2.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="../core/list.html">list</a> cpp.copts</pre></p>

    The flags passed to Bazel by <a href="/versions/8.2.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="../builtins/Label.html">Label</a> cpp.custom_malloc</pre></p>

    Returns label pointed to by <a href="/versions/8.2.0/docs/user-manual#flag--custom_malloc"><code>--custom_malloc</code></a> option. Can be accessed with <a href="../globals/bzl.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="../core/list.html">list</a> cpp.cxxopts</pre></p>

    The flags passed to Bazel by <a href="/versions/8.2.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="../core/list.html">list</a> cpp.linkopts</pre></p>

    The flags passed to Bazel by <a href="/versions/8.2.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="../core/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="../core/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="../core/list.html">list</a> cpp.objccopts</pre></p>

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



</body>
</html>

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