blob: c2855d1b8bd5e22247198230e646dd81aa37d57e [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>CMAKE_CURRENT_FUNCTION_LIST_DIR &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="CMAKE_CURRENT_FUNCTION_LIST_FILE" href="CMAKE_CURRENT_FUNCTION_LIST_FILE.html" />
<link rel="prev" title="CMAKE_CURRENT_FUNCTION" href="CMAKE_CURRENT_FUNCTION.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="CMAKE_CURRENT_FUNCTION_LIST_FILE.html" title="CMAKE_CURRENT_FUNCTION_LIST_FILE"
accesskey="N">next</a> |</li>
<li class="right" >
<a href="CMAKE_CURRENT_FUNCTION.html" title="CMAKE_CURRENT_FUNCTION"
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-variables.7.html" accesskey="U">cmake-variables(7)</a> &#187;</li>
<li class="nav-item nav-item-this"><a href="">CMAKE_CURRENT_FUNCTION_LIST_DIR</a></li>
</ul>
</div>
<div class="document">
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body" role="main">
<div class="section" id="cmake-current-function-list-dir">
<span id="variable:CMAKE_CURRENT_FUNCTION_LIST_DIR"></span><h1>CMAKE_CURRENT_FUNCTION_LIST_DIR<a class="headerlink" href="#cmake-current-function-list-dir" title="Permalink to this headline">ΒΆ</a></h1>
<div class="versionadded">
<p><span class="versionmodified added">New in version 3.17.</span></p>
</div>
<p>When executing code inside a <span class="target" id="index-0-command:function"></span><a class="reference internal" href="../command/function.html#command:function" title="function"><code class="xref cmake cmake-command docutils literal notranslate"><span class="pre">function()</span></code></a>, this variable
contains the full directory of the listfile that defined the current function.</p>
<p>It is quite common practice in CMake for modules to use some additional files,
such as templates to be copied in after substituting CMake variables.
In such cases, a function needs to know where to locate those files in a way
that doesn't depend on where the function is called. Without
<code class="docutils literal notranslate"><span class="pre">CMAKE_CURRENT_FUNCTION_LIST_DIR</span></code>, the code to do that would typically use
the following pattern:</p>
<div class="highlight-cmake notranslate"><div class="highlight"><pre><span></span><span class="nf">set(</span><span class="nb">_THIS_MODULE_BASE_DIR</span><span class="w"> </span><span class="s">&quot;${CMAKE_CURRENT_LIST_DIR}&quot;</span><span class="nf">)</span><span class="w"></span>
<span class="nf">function(</span><span class="nb">foo</span><span class="nf">)</span><span class="w"></span>
<span class="w"> </span><span class="nf">configure_file(</span><span class="w"></span>
<span class="w"> </span><span class="s">&quot;${_THIS_MODULE_BASE_DIR}/some.template.in&quot;</span><span class="w"></span>
<span class="w"> </span><span class="nb">some.output</span><span class="w"></span>
<span class="w"> </span><span class="nf">)</span><span class="w"></span>
<span class="nf">endfunction()</span><span class="w"></span>
</pre></div>
</div>
<p>Using <code class="docutils literal notranslate"><span class="pre">CMAKE_CURRENT_FUNCTION_LIST_DIR</span></code> inside the function instead
eliminates the need for the extra variable which would otherwise be visible
outside the function's scope.
The above example can be written in the more concise and more robust form:</p>
<div class="highlight-cmake notranslate"><div class="highlight"><pre><span></span><span class="nf">function(</span><span class="nb">foo</span><span class="nf">)</span><span class="w"></span>
<span class="w"> </span><span class="nf">configure_file(</span><span class="w"></span>
<span class="w"> </span><span class="s">&quot;${CMAKE_CURRENT_FUNCTION_LIST_DIR}/some.template.in&quot;</span><span class="w"></span>
<span class="w"> </span><span class="nb">some.output</span><span class="w"></span>
<span class="w"> </span><span class="nf">)</span><span class="w"></span>
<span class="nf">endfunction()</span><span class="w"></span>
</pre></div>
</div>
<p>See also <span class="target" id="index-0-variable:CMAKE_CURRENT_FUNCTION"></span><a class="reference internal" href="CMAKE_CURRENT_FUNCTION.html#variable:CMAKE_CURRENT_FUNCTION" title="CMAKE_CURRENT_FUNCTION"><code class="xref cmake cmake-variable docutils literal notranslate"><span class="pre">CMAKE_CURRENT_FUNCTION</span></code></a>,
<span class="target" id="index-0-variable:CMAKE_CURRENT_FUNCTION_LIST_FILE"></span><a class="reference internal" href="CMAKE_CURRENT_FUNCTION_LIST_FILE.html#variable:CMAKE_CURRENT_FUNCTION_LIST_FILE" title="CMAKE_CURRENT_FUNCTION_LIST_FILE"><code class="xref cmake cmake-variable docutils literal notranslate"><span class="pre">CMAKE_CURRENT_FUNCTION_LIST_FILE</span></code></a> and
<span class="target" id="index-0-variable:CMAKE_CURRENT_FUNCTION_LIST_LINE"></span><a class="reference internal" href="CMAKE_CURRENT_FUNCTION_LIST_LINE.html#variable:CMAKE_CURRENT_FUNCTION_LIST_LINE" title="CMAKE_CURRENT_FUNCTION_LIST_LINE"><code class="xref cmake cmake-variable docutils literal notranslate"><span class="pre">CMAKE_CURRENT_FUNCTION_LIST_LINE</span></code></a>.</p>
</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="CMAKE_CURRENT_FUNCTION.html"
title="previous chapter">CMAKE_CURRENT_FUNCTION</a></p>
<h4>Next topic</h4>
<p class="topless"><a href="CMAKE_CURRENT_FUNCTION_LIST_FILE.html"
title="next chapter">CMAKE_CURRENT_FUNCTION_LIST_FILE</a></p>
<div role="note" aria-label="source link">
<h3>This Page</h3>
<ul class="this-page-menu">
<li><a href="../_sources/variable/CMAKE_CURRENT_FUNCTION_LIST_DIR.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="CMAKE_CURRENT_FUNCTION_LIST_FILE.html" title="CMAKE_CURRENT_FUNCTION_LIST_FILE"
>next</a> |</li>
<li class="right" >
<a href="CMAKE_CURRENT_FUNCTION.html" title="CMAKE_CURRENT_FUNCTION"
>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-variables.7.html" >cmake-variables(7)</a> &#187;</li>
<li class="nav-item nav-item-this"><a href="">CMAKE_CURRENT_FUNCTION_LIST_DIR</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>