blob: b3d24bccf1617d14b4da45e932dc7de7d69a1ba4 [file] [log] [blame]
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>CheckCXXSymbolExists &mdash; CMake 3.23.1 Documentation</title>
<link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
<link rel="stylesheet" type="text/css" href="../_static/cmake.css" />
<script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
<script src="../_static/jquery.js"></script>
<script src="../_static/underscore.js"></script>
<script src="../_static/doctools.js"></script>
<link rel="shortcut icon" href="../_static/cmake-favicon.ico"/>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
<link rel="next" title="CheckFortranCompilerFlag" href="CheckFortranCompilerFlag.html" />
<link rel="prev" title="CheckCXXSourceRuns" href="CheckCXXSourceRuns.html" />
</head><body>
<div class="related" role="navigation" aria-label="related navigation">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="../genindex.html" title="General Index"
accesskey="I">index</a></li>
<li class="right" >
<a href="CheckFortranCompilerFlag.html" title="CheckFortranCompilerFlag"
accesskey="N">next</a> |</li>
<li class="right" >
<a href="CheckCXXSourceRuns.html" title="CheckCXXSourceRuns"
accesskey="P">previous</a> |</li>
<li>
<img src="../_static/cmake-logo-16.png" alt=""
style="vertical-align: middle; margin-top: -2px" />
</li>
<li>
<a href="https://cmake.org/">CMake</a> &#187;
</li>
<li>
<a href="../index.html">3.23.1 Documentation</a> &#187;
</li>
<li class="nav-item nav-item-1"><a href="../manual/cmake-modules.7.html" accesskey="U">cmake-modules(7)</a> &#187;</li>
<li class="nav-item nav-item-this"><a href="">CheckCXXSymbolExists</a></li>
</ul>
</div>
<div class="document">
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body" role="main">
<div class="section" id="checkcxxsymbolexists">
<span id="module:CheckCXXSymbolExists"></span><h1>CheckCXXSymbolExists<a class="headerlink" href="#checkcxxsymbolexists" title="Permalink to this headline"></a></h1>
<p>Check if a symbol exists as a function, variable, or macro in <code class="docutils literal notranslate"><span class="pre">C++</span></code>.</p>
<dl class="cmake command">
<dt class="sig sig-object cmake" id="command:check_cxx_symbol_exists">
<span class="sig-name descname"><span class="pre">check_cxx_symbol_exists</span></span><a class="headerlink" href="#command:check_cxx_symbol_exists" title="Permalink to this definition"></a></dt>
<dd><div class="highlight-cmake notranslate"><div class="highlight"><pre><span></span><span class="nf">check_cxx_symbol_exists(</span><span class="nv">&lt;symbol&gt;</span><span class="w"> </span><span class="nv">&lt;files&gt;</span><span class="w"> </span><span class="nv">&lt;variable&gt;</span><span class="nf">)</span><span class="w"></span>
</pre></div>
</div>
<p>Check that the <code class="docutils literal notranslate"><span class="pre">&lt;symbol&gt;</span></code> is available after including given header
<code class="docutils literal notranslate"><span class="pre">&lt;files&gt;</span></code> and store the result in a <code class="docutils literal notranslate"><span class="pre">&lt;variable&gt;</span></code>. Specify the list of
files in one argument as a semicolon-separated list.
<code class="docutils literal notranslate"><span class="pre">check_cxx_symbol_exists()</span></code> can be used to check for symbols as seen by
the C++ compiler, as opposed to <span class="target" id="index-0-command:check_symbol_exists"></span><a class="reference internal" href="CheckSymbolExists.html#command:check_symbol_exists" title="check_symbol_exists"><code class="xref cmake cmake-command docutils literal notranslate"><span class="pre">check_symbol_exists()</span></code></a>, which always
uses the <code class="docutils literal notranslate"><span class="pre">C</span></code> compiler.</p>
<p>If the header files define the symbol as a macro it is considered
available and assumed to work. If the header files declare the symbol
as a function or variable then the symbol must also be available for
linking. If the symbol is a type, enum value, or C++ template it will
not be recognized: consider using the <span class="target" id="index-0-module:CheckTypeSize"></span><a class="reference internal" href="CheckTypeSize.html#module:CheckTypeSize" title="CheckTypeSize"><code class="xref cmake cmake-module docutils literal notranslate"><span class="pre">CheckTypeSize</span></code></a>
or <span class="target" id="index-0-module:CheckSourceCompiles"></span><a class="reference internal" href="CheckSourceCompiles.html#module:CheckSourceCompiles" title="CheckSourceCompiles"><code class="xref cmake cmake-module docutils literal notranslate"><span class="pre">CheckSourceCompiles</span></code></a> module instead.</p>
</dd></dl>
<div class="admonition note">
<p class="admonition-title">Note</p>
<p>This command is unreliable when <code class="docutils literal notranslate"><span class="pre">&lt;symbol&gt;</span></code> is (potentially) an overloaded
function. Since there is no reliable way to predict whether a given function
in the system environment may be defined as an overloaded function or may be
an overloaded function on other systems or will become so in the future, it
is generally advised to use the <span class="target" id="index-0-module:CheckCXXSourceCompiles"></span><a class="reference internal" href="CheckCXXSourceCompiles.html#module:CheckCXXSourceCompiles" title="CheckCXXSourceCompiles"><code class="xref cmake cmake-module docutils literal notranslate"><span class="pre">CheckCXXSourceCompiles</span></code></a> module for
checking any function symbol (unless somehow you surely know the checked
function is not overloaded on other systems or will not be so in the
future).</p>
</div>
<p>The following variables may be set before calling this macro to modify
the way the check is run:</p>
<dl>
<dt><code class="docutils literal notranslate"><span class="pre">CMAKE_REQUIRED_FLAGS</span></code></dt><dd><p>string of compile command line flags.</p>
</dd>
<dt><code class="docutils literal notranslate"><span class="pre">CMAKE_REQUIRED_DEFINITIONS</span></code></dt><dd><p>a <a class="reference internal" href="../manual/cmake-language.7.html#cmake-language-lists"><span class="std std-ref">;-list</span></a> of macros to define (-DFOO=bar).</p>
</dd>
<dt><code class="docutils literal notranslate"><span class="pre">CMAKE_REQUIRED_INCLUDES</span></code></dt><dd><p>a <a class="reference internal" href="../manual/cmake-language.7.html#cmake-language-lists"><span class="std std-ref">;-list</span></a> of header search paths to pass to
the compiler.</p>
</dd>
<dt><code class="docutils literal notranslate"><span class="pre">CMAKE_REQUIRED_LINK_OPTIONS</span></code></dt><dd><div class="versionadded">
<p><span class="versionmodified added">New in version 3.14: </span>a <a class="reference internal" href="../manual/cmake-language.7.html#cmake-language-lists"><span class="std std-ref">;-list</span></a> of options to add to the link command.</p>
</div>
</dd>
<dt><code class="docutils literal notranslate"><span class="pre">CMAKE_REQUIRED_LIBRARIES</span></code></dt><dd><p>a <a class="reference internal" href="../manual/cmake-language.7.html#cmake-language-lists"><span class="std std-ref">;-list</span></a> of libraries to add to the link
command. See policy <span class="target" id="index-0-policy:CMP0075"></span><a class="reference internal" href="../policy/CMP0075.html#policy:CMP0075" title="CMP0075"><code class="xref cmake cmake-policy docutils literal notranslate"><span class="pre">CMP0075</span></code></a>.</p>
</dd>
<dt><code class="docutils literal notranslate"><span class="pre">CMAKE_REQUIRED_QUIET</span></code></dt><dd><div class="versionadded">
<p><span class="versionmodified added">New in version 3.1: </span>execute quietly without messages.</p>
</div>
</dd>
</dl>
<p>For example:</p>
<div class="highlight-cmake notranslate"><div class="highlight"><pre><span></span><span class="nf">include(</span><span class="nb">CheckCXXSymbolExists</span><span class="nf">)</span><span class="w"></span>
<span class="c"># Check for macro SEEK_SET</span>
<span class="nf">check_cxx_symbol_exists(</span><span class="no">SEEK_SET</span><span class="w"> </span><span class="s">&quot;cstdio&quot;</span><span class="w"> </span><span class="no">HAVE_SEEK_SET</span><span class="nf">)</span><span class="w"></span>
<span class="c"># Check for function std::fopen</span>
<span class="nf">check_cxx_symbol_exists(</span><span class="nb">std</span><span class="o">::</span><span class="nb">fopen</span><span class="w"> </span><span class="s">&quot;cstdio&quot;</span><span class="w"> </span><span class="no">HAVE_STD_FOPEN</span><span class="nf">)</span><span class="w"></span>
</pre></div>
</div>
</div>
<div class="clearer"></div>
</div>
</div>
</div>
<div class="sphinxsidebar" role="navigation" aria-label="main navigation">
<div class="sphinxsidebarwrapper">
<h4>Previous topic</h4>
<p class="topless"><a href="CheckCXXSourceRuns.html"
title="previous chapter">CheckCXXSourceRuns</a></p>
<h4>Next topic</h4>
<p class="topless"><a href="CheckFortranCompilerFlag.html"
title="next chapter">CheckFortranCompilerFlag</a></p>
<div role="note" aria-label="source link">
<h3>This Page</h3>
<ul class="this-page-menu">
<li><a href="../_sources/module/CheckCXXSymbolExists.rst.txt"
rel="nofollow">Show Source</a></li>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
<h3 id="searchlabel">Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
<input type="text" name="q" aria-labelledby="searchlabel" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"/>
<input type="submit" value="Go" />
</form>
</div>
</div>
<script>$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
</div>
<div class="related" role="navigation" aria-label="related navigation">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="../genindex.html" title="General Index"
>index</a></li>
<li class="right" >
<a href="CheckFortranCompilerFlag.html" title="CheckFortranCompilerFlag"
>next</a> |</li>
<li class="right" >
<a href="CheckCXXSourceRuns.html" title="CheckCXXSourceRuns"
>previous</a> |</li>
<li>
<img src="../_static/cmake-logo-16.png" alt=""
style="vertical-align: middle; margin-top: -2px" />
</li>
<li>
<a href="https://cmake.org/">CMake</a> &#187;
</li>
<li>
<a href="../index.html">3.23.1 Documentation</a> &#187;
</li>
<li class="nav-item nav-item-1"><a href="../manual/cmake-modules.7.html" >cmake-modules(7)</a> &#187;</li>
<li class="nav-item nav-item-this"><a href="">CheckCXXSymbolExists</a></li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2000-2022 Kitware, Inc. and Contributors.
Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.1.2.
</div>
</body>
</html>