blob: dae29edb5e46bc36cefa9b67c033cf046f69f406 [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_MESSAGE_CONTEXT &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_MESSAGE_CONTEXT_SHOW" href="CMAKE_MESSAGE_CONTEXT_SHOW.html" />
<link rel="prev" title="CMAKE_MAXIMUM_RECURSION_DEPTH" href="CMAKE_MAXIMUM_RECURSION_DEPTH.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_MESSAGE_CONTEXT_SHOW.html" title="CMAKE_MESSAGE_CONTEXT_SHOW"
accesskey="N">next</a> |</li>
<li class="right" >
<a href="CMAKE_MAXIMUM_RECURSION_DEPTH.html" title="CMAKE_MAXIMUM_RECURSION_DEPTH"
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_MESSAGE_CONTEXT</a></li>
</ul>
</div>
<div class="document">
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body" role="main">
<div class="section" id="cmake-message-context">
<span id="variable:CMAKE_MESSAGE_CONTEXT"></span><h1>CMAKE_MESSAGE_CONTEXT<a class="headerlink" href="#cmake-message-context" 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 enabled by the <span class="target" id="index-0-manual:cmake(1)"></span><a class="reference internal" href="../manual/cmake.1.html#manual:cmake(1)" title="cmake(1)"><code class="xref cmake cmake-manual docutils literal notranslate"><span class="pre">cmake</span></code></a> <code class="docutils literal notranslate"><span class="pre">--log-context</span></code> command line
option or the <span class="target" id="index-0-variable:CMAKE_MESSAGE_CONTEXT_SHOW"></span><a class="reference internal" href="CMAKE_MESSAGE_CONTEXT_SHOW.html#variable:CMAKE_MESSAGE_CONTEXT_SHOW" title="CMAKE_MESSAGE_CONTEXT_SHOW"><code class="xref cmake cmake-variable docutils literal notranslate"><span class="pre">CMAKE_MESSAGE_CONTEXT_SHOW</span></code></a> variable, the
<span class="target" id="index-0-command:message"></span><a class="reference internal" href="../command/message.html#command:message" title="message"><code class="xref cmake cmake-command docutils literal notranslate"><span class="pre">message()</span></code></a> command converts the <code class="docutils literal notranslate"><span class="pre">CMAKE_MESSAGE_CONTEXT</span></code> list into a
dot-separated string surrounded by square brackets and prepends it to each line
for messages of log levels <code class="docutils literal notranslate"><span class="pre">NOTICE</span></code> and below.</p>
<p>For logging contexts to work effectively, projects should generally
<code class="docutils literal notranslate"><span class="pre">APPEND</span></code> and <code class="docutils literal notranslate"><span class="pre">POP_BACK</span></code> an item to the current value of
<code class="docutils literal notranslate"><span class="pre">CMAKE_MESSAGE_CONTEXT</span></code> rather than replace it.
Projects should not assume the message context at the top of the source tree
is empty, as there are scenarios where the context might have already been set
(e.g. hierarchical projects).</p>
<div class="admonition warning">
<p class="admonition-title">Warning</p>
<p>Valid context names are restricted to anything that could be used
as a CMake variable name. All names that begin with an underscore
or the string <code class="docutils literal notranslate"><span class="pre">cmake_</span></code> are also reserved for use by CMake and
should not be used by projects.</p>
</div>
<p>Example:</p>
<div class="highlight-cmake notranslate"><div class="highlight"><pre><span></span><span class="nf">function(</span><span class="nb">bar</span><span class="nf">)</span><span class="w"></span>
<span class="w"> </span><span class="nf">list(</span><span class="no">APPEND</span><span class="w"> </span><span class="no">CMAKE_MESSAGE_CONTEXT</span><span class="w"> </span><span class="s">&quot;bar&quot;</span><span class="nf">)</span><span class="w"></span>
<span class="w"> </span><span class="nf">message(</span><span class="no">VERBOSE</span><span class="w"> </span><span class="s">&quot;bar VERBOSE message&quot;</span><span class="nf">)</span><span class="w"></span>
<span class="nf">endfunction()</span><span class="w"></span>
<span class="nf">function(</span><span class="nb">baz</span><span class="nf">)</span><span class="w"></span>
<span class="w"> </span><span class="nf">list(</span><span class="no">APPEND</span><span class="w"> </span><span class="no">CMAKE_MESSAGE_CONTEXT</span><span class="w"> </span><span class="s">&quot;baz&quot;</span><span class="nf">)</span><span class="w"></span>
<span class="w"> </span><span class="nf">message(</span><span class="no">DEBUG</span><span class="w"> </span><span class="s">&quot;baz DEBUG message&quot;</span><span class="nf">)</span><span class="w"></span>
<span class="nf">endfunction()</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">list(</span><span class="no">APPEND</span><span class="w"> </span><span class="no">CMAKE_MESSAGE_CONTEXT</span><span class="w"> </span><span class="s">&quot;foo&quot;</span><span class="nf">)</span><span class="w"></span>
<span class="w"> </span><span class="nf">bar()</span><span class="w"></span>
<span class="w"> </span><span class="nf">message(</span><span class="no">TRACE</span><span class="w"> </span><span class="s">&quot;foo TRACE message&quot;</span><span class="nf">)</span><span class="w"></span>
<span class="w"> </span><span class="nf">baz()</span><span class="w"></span>
<span class="nf">endfunction()</span><span class="w"></span>
<span class="nf">list(</span><span class="no">APPEND</span><span class="w"> </span><span class="no">CMAKE_MESSAGE_CONTEXT</span><span class="w"> </span><span class="s">&quot;top&quot;</span><span class="nf">)</span><span class="w"></span>
<span class="nf">message(</span><span class="no">VERBOSE</span><span class="w"> </span><span class="s">&quot;Before `foo`&quot;</span><span class="nf">)</span><span class="w"></span>
<span class="nf">foo()</span><span class="w"></span>
<span class="nf">message(</span><span class="no">VERBOSE</span><span class="w"> </span><span class="s">&quot;After `foo`&quot;</span><span class="nf">)</span><span class="w"></span>
<span class="nf">list(</span><span class="no">POP_BACK</span><span class="w"> </span><span class="no">CMAKE_MESSAGE_CONTEXT</span><span class="nf">)</span><span class="w"></span>
</pre></div>
</div>
<p>Which results in the following output:</p>
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>-- [top] Before `foo`
-- [top.foo.bar] bar VERBOSE message
-- [top.foo] foo TRACE message
-- [top.foo.baz] baz DEBUG message
-- [top] After `foo`
</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="CMAKE_MAXIMUM_RECURSION_DEPTH.html"
title="previous chapter">CMAKE_MAXIMUM_RECURSION_DEPTH</a></p>
<h4>Next topic</h4>
<p class="topless"><a href="CMAKE_MESSAGE_CONTEXT_SHOW.html"
title="next chapter">CMAKE_MESSAGE_CONTEXT_SHOW</a></p>
<div role="note" aria-label="source link">
<h3>This Page</h3>
<ul class="this-page-menu">
<li><a href="../_sources/variable/CMAKE_MESSAGE_CONTEXT.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_MESSAGE_CONTEXT_SHOW.html" title="CMAKE_MESSAGE_CONTEXT_SHOW"
>next</a> |</li>
<li class="right" >
<a href="CMAKE_MAXIMUM_RECURSION_DEPTH.html" title="CMAKE_MAXIMUM_RECURSION_DEPTH"
>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_MESSAGE_CONTEXT</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>