<rss xmlns:atom="http://www.w3.org/2005/Atom" version="2.0">
    <channel>
        <title>CMake - 标签 - 招财猫的部落格</title>
        <link>https://blog.besty.day/tags/cmake/</link>
        <description>CMake - 标签 - 招财猫的部落格</description>
        <generator>Hugo -- gohugo.io</generator><language>zh-CN</language><lastBuildDate>Wed, 13 Apr 2022 12:37:07 &#43;0800</lastBuildDate><atom:link href="https://blog.besty.day/tags/cmake/" rel="self" type="application/rss+xml" /><item>
    <title>CMake构建类型</title>
    <link>https://blog.besty.day/posts/2022/04/cmake-build-type/</link>
    <pubDate>Wed, 13 Apr 2022 12:37:07 &#43;0800</pubDate>
    <author>招财猫</author>
    <guid>https://blog.besty.day/posts/2022/04/cmake-build-type/</guid>
    <description><![CDATA[<h2 id="构建类型基础知识">构建类型基础知识</h2>
<p>CMake提供了几种默认的构建类型：</p>
<ul>
<li>Debug：没有优化并附带完整的调试信息，通常在开发和调试过程中使用。</li>
<li>Release：没有调试信息，提供全面的速度优化。</li>
<li>RelWithDebInfo：在某种程度上是前两者的妥协，它的目的是使性能接近于发布版，但仍允许某种程度的调试。通常会对速度进行大部分优化，但也会启用大部分调试功能。默认禁用断言。</li>
<li>MinSizeRel：通常只用于有限的资源环境，如嵌入式设备。代码是针对大小而不是速度进行优化的，并且不创建调试信息。</li>
</ul>
<p>每种构建类型都会产生一组不同的编译器和链接器标志，因此了解如何选择构建类型以及如何避免一些常见的问题是很重要的。</p>]]></description>
</item>
<item>
    <title>CMake策略</title>
    <link>https://blog.besty.day/posts/2022/04/cmake-policy/</link>
    <pubDate>Sat, 09 Apr 2022 12:40:19 &#43;0800</pubDate>
    <author>招财猫</author>
    <guid>https://blog.besty.day/posts/2022/04/cmake-policy/</guid>
    <description><![CDATA[<p>CMake策略可以用来控制CMake使用新版还是旧版CMake的行为。</p>
<h2 id="策略控制">策略控制</h2>
<p>CMake的策略功能与cmake_minimum_required命令紧密相连，该命令不仅指定了一个项目所需的最小CMake版本，而且还将CMake的行为设置为与所给版本相匹配。然而，一个项目可能需要比cmake_minimum_required命令提供更精细的控制，cmake_policy命令就是用于对策略进行更具体的控制。最简单的形式如下：</p>]]></description>
</item>
<item>
    <title>CMake模块</title>
    <link>https://blog.besty.day/posts/2022/04/cmake-module/</link>
    <pubDate>Thu, 07 Apr 2022 22:40:12 &#43;0800</pubDate>
    <author>招财猫</author>
    <guid>https://blog.besty.day/posts/2022/04/cmake-module/</guid>
    <description><![CDATA[<p>模块是预先写好的CMake代码，通常放在一个目录中作为CMake发布的一部分。include命令可以将模块代码引入到当前作用域，语法如下：</p>
<div class="code-block code-line-numbers open" style="counter-reset: code-block 0">
    <div class="code-header language-cmake">
        <span class="code-title"><i class="arrow fas fa-angle-right" aria-hidden="true"></i></span>
        <span class="ellipses"><i class="fas fa-ellipsis-h" aria-hidden="true"></i></span>
        <span class="copy" title="复制到剪贴板"><i class="far fa-copy" aria-hidden="true"></i></span>
    </div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-cmake" data-lang="cmake"><span class="line"><span class="cl"><span class="nb">include</span><span class="p">(</span><span class="s">module</span> <span class="s">[OPTIONAL]</span> <span class="s">[RESULT_VARIABLE</span> <span class="s">myVar]</span> <span class="s">[NO_POLICY_SCOPE]</span><span class="p">)</span></span></span></code></pre></div></div>
<p>CMake首先在变量CMAKE_MODULE_PATH定义的目录列表中按顺序搜索每个目录来查找模块文件，第一个匹配的文件将被使用。如果没有找到匹配的文件，CMake将在它自己的内部模块目录中搜索。一个常见的做法是将自己写的模块加到CMAKE_MODULE_PATH变量中，然后使用模块代码：</p>]]></description>
</item>
<item>
    <title>CMake生成器表达式</title>
    <link>https://blog.besty.day/posts/2022/04/cmake-generator-expr/</link>
    <pubDate>Tue, 05 Apr 2022 20:19:37 &#43;0800</pubDate>
    <author>招财猫</author>
    <guid>https://blog.besty.day/posts/2022/04/cmake-generator-expr/</guid>
    <description><![CDATA[<p>生成器表达式不在配置阶段计算，而是推迟到生成阶段，当项目文件被写入时再进行计算。它可以用来执行条件逻辑，输出字符串，提供有关构建的各个方面的信息。</p>]]></description>
</item>
<item>
    <title>CMake属性</title>
    <link>https://blog.besty.day/posts/2022/04/cmake-property/</link>
    <pubDate>Fri, 01 Apr 2022 23:19:10 &#43;0800</pubDate>
    <author>招财猫</author>
    <guid>https://blog.besty.day/posts/2022/04/cmake-property/</guid>
    <description><![CDATA[<p>属性几乎影响着构建过程的所有方面，它附属于一个特定的实体，无论是目录、目标、源文件、测试用例、缓存变量甚至是整个构建过程本身。属性并不像变量那样持有一个独立的值，而是为它所连接的实体提供特定的信息。CMake用于相关属性和变量的名称通常遵循相同的模式：变量名称=CMAKE_属性名称。</p>]]></description>
</item>
<item>
    <title>CMake函数和宏</title>
    <link>https://blog.besty.day/posts/2022/03/cmake-func-macro/</link>
    <pubDate>Thu, 31 Mar 2022 22:09:08 &#43;0800</pubDate>
    <author>招财猫</author>
    <guid>https://blog.besty.day/posts/2022/03/cmake-func-macro/</guid>
    <description><![CDATA[<h2 id="基础知识">基础知识</h2>
<p>CMake的函数和宏与C语言的函数和宏特性相似。函数引入了一个新的作用域，函数参数是函数体内可访问的变量。宏主体在宏调用的地方展开，宏参数只是做简单的字符串替换。一个CMake函数或宏的定义如下：</p>]]></description>
</item>
<item>
    <title>CMake子目录</title>
    <link>https://blog.besty.day/posts/2022/03/cmake-subdirectory/</link>
    <pubDate>Wed, 30 Mar 2022 22:10:24 &#43;0800</pubDate>
    <author>招财猫</author>
    <guid>https://blog.besty.day/posts/2022/03/cmake-subdirectory/</guid>
    <description><![CDATA[<p>CMake提供两个命令add_subdirectory和include，将另一个文件或目录中的内容包含到构建中，允许构建逻辑分布在目录层次中，而不是所有东西都在最顶层定义。优点如下：</p>]]></description>
</item>
<item>
    <title>CMake流程控制</title>
    <link>https://blog.besty.day/posts/2022/03/cmake-flow-control/</link>
    <pubDate>Tue, 29 Mar 2022 12:52:57 &#43;0800</pubDate>
    <author>招财猫</author>
    <guid>https://blog.besty.day/posts/2022/03/cmake-flow-control/</guid>
    <description><![CDATA[<h2 id="if命令">if命令</h2>
<p>if命令语法如下：</p>
<div class="code-block code-line-numbers open" style="counter-reset: code-block 0">
    <div class="code-header language-cmake">
        <span class="code-title"><i class="arrow fas fa-angle-right" aria-hidden="true"></i></span>
        <span class="ellipses"><i class="fas fa-ellipsis-h" aria-hidden="true"></i></span>
        <span class="copy" title="复制到剪贴板"><i class="far fa-copy" aria-hidden="true"></i></span>
    </div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-cmake" data-lang="cmake"><span class="line"><span class="cl"><span class="nb">if</span><span class="p">(</span><span class="s">expression1</span><span class="p">)</span><span class="err">
</span></span></span><span class="line"><span class="cl"><span class="err"></span>	<span class="c"># commands ...
</span></span></span><span class="line"><span class="cl"><span class="c"></span><span class="nb">elseif</span><span class="p">(</span><span class="s">expression2</span><span class="p">)</span><span class="err">
</span></span></span><span class="line"><span class="cl"><span class="err"></span>	<span class="c"># commands ...
</span></span></span><span class="line"><span class="cl"><span class="c"></span><span class="nb">else</span><span class="p">()</span><span class="err">
</span></span></span><span class="line"><span class="cl"><span class="err"></span>	<span class="c"># commands ...
</span></span></span><span class="line"><span class="cl"><span class="c"></span><span class="nb">endif</span><span class="p">()</span></span></span></code></pre></div></div>
<p>if和elseif命令中的表达式可以有多种不同的形式。</p>
<h3 id="基本表达式">基本表达式</h3>
<p>最基本的表达式是一个常数：</p>]]></description>
</item>
<item>
    <title>CMake变量</title>
    <link>https://blog.besty.day/posts/2022/03/cmake-variable/</link>
    <pubDate>Sun, 27 Mar 2022 20:39:58 &#43;0800</pubDate>
    <author>招财猫</author>
    <guid>https://blog.besty.day/posts/2022/03/cmake-variable/</guid>
    <description><![CDATA[<h2 id="变量基础">变量基础</h2>
<p>和任何其他计算机语言一样，变量是CMake的基石。定义变量的最基本方法是使用set命令。其形式如下：</p>
<div class="code-block code-line-numbers open" style="counter-reset: code-block 0">
    <div class="code-header language-cmake">
        <span class="code-title"><i class="arrow fas fa-angle-right" aria-hidden="true"></i></span>
        <span class="ellipses"><i class="fas fa-ellipsis-h" aria-hidden="true"></i></span>
        <span class="copy" title="复制到剪贴板"><i class="far fa-copy" aria-hidden="true"></i></span>
    </div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-cmake" data-lang="cmake"><span class="line"><span class="cl"><span class="nb">set</span><span class="p">(</span><span class="s">varName</span> <span class="s">value...</span> <span class="s">[PARENT_SCOPE]</span><span class="p">)</span></span></span></code></pre></div></div>
<p>变量的名称可以包含字母、数字和下划线，字母是区分大小写的。名称中还可以包含字符<code>./-+</code>，但在实践中很少见到。像其他语言一样，在CMake中一个变量有一个特定的作用域。变量不能在其作用域之外被读取或修改。</p>]]></description>
</item>
<item>
    <title>CMake构建目标</title>
    <link>https://blog.besty.day/posts/2022/03/cmake-target/</link>
    <pubDate>Sun, 27 Mar 2022 16:14:05 &#43;0800</pubDate>
    <author>招财猫</author>
    <guid>https://blog.besty.day/posts/2022/03/cmake-target/</guid>
    <description><![CDATA[<p>除了控制台可执行程序，CMake还支持定义其他类型的可执行文件，如苹果平台上的应用包和Windows GUI应用程序。除了可执行文件外，开发人员还经常需要构建和链接库。CMake支持几种不同类型的库，包括静态库、共享库、模块库和框架库。CMake还提供了非常强大的功能来管理目标之间的依赖关系以及库的链接方式。</p>]]></description>
</item>
</channel>
</rss>
