mirror of
https://github.com/jaywcjlove/reference.git
synced 2025-06-17 20:51:21 +08:00
@ -42,11 +42,16 @@
|
||||
<p>本清单提供了对 CMake 的入门简要概述,以及 CMake 常用示例</p>
|
||||
</div></header><div class="menu-tocs"><div class="menu-btn"><svg aria-hidden="true" fill="currentColor" height="1em" width="1em" viewBox="0 0 16 16" version="1.1" data-view-component="true">
|
||||
<path fill-rule="evenodd" d="M2 4a1 1 0 100-2 1 1 0 000 2zm3.75-1.5a.75.75 0 000 1.5h8.5a.75.75 0 000-1.5h-8.5zm0 5a.75.75 0 000 1.5h8.5a.75.75 0 000-1.5h-8.5zm0 5a.75.75 0 000 1.5h8.5a.75.75 0 000-1.5h-8.5zM3 8a1 1 0 11-2 0 1 1 0 012 0zm-1 6a1 1 0 100-2 1 1 0 000 2z"></path>
|
||||
</svg></div><div class="menu-modal"><a aria-hidden="true" class="leve2 tocs-link" href="#入门">入门</a><a aria-hidden="true" class="leve3 tocs-link" href="#hello-cmake">Hello CMake</a><a aria-hidden="true" class="leve4 tocs-link" href="#cmakeliststxt">CMakeLists.txt</a><a aria-hidden="true" class="leve4 tocs-link" href="#maincpp">main.cpp</a><a aria-hidden="true" class="leve4 tocs-link" href="#编译示例">编译示例</a><a aria-hidden="true" class="leve3 tocs-link" href="#cmake">cmake</a><a aria-hidden="true" class="leve2 tocs-link" href="#另见">另见</a></div></div><div class="h1wrap-body"><div class="wrap h2body-exist"><div class="wrap-header h2wrap"><h2 id="入门"><a aria-hidden="true" tabindex="-1" href="#入门"><span class="icon icon-link"></span></a>入门</h2><div class="wrap-body">
|
||||
</svg></div><div class="menu-modal"><a aria-hidden="true" class="leve2 tocs-link" href="#入门">入门</a><a aria-hidden="true" class="leve3 tocs-link" href="#hello-cmake">Hello CMake</a><a aria-hidden="true" class="leve4 tocs-link" href="#cmakeliststxt">CMakeLists.txt</a><a aria-hidden="true" class="leve4 tocs-link" href="#maincpp">main.cpp</a><a aria-hidden="true" class="leve4 tocs-link" href="#编译示例">编译示例</a><a aria-hidden="true" class="leve3 tocs-link" href="#cmake">cmake</a><a aria-hidden="true" class="leve4 tocs-link" href="#常用参数">常用参数</a><a aria-hidden="true" class="leve2 tocs-link" href="#另见">另见</a></div></div><div class="h1wrap-body"><div class="wrap h2body-exist"><div class="wrap-header h2wrap"><h2 id="入门"><a aria-hidden="true" tabindex="-1" href="#入门"><span class="icon icon-link"></span></a>入门</h2><div class="wrap-body">
|
||||
</div></div><div class="h2wrap-body"><div class="wrap h3body-exist"><div class="wrap-header h3wrap"><h3 id="hello-cmake"><a aria-hidden="true" tabindex="-1" href="#hello-cmake"><span class="icon icon-link"></span></a>Hello CMake</h3><div class="wrap-body">
|
||||
<p>CMake 是一个用于配置跨平台源代码项目应该如何配置的工具建立在给定的平台上。</p>
|
||||
<pre class="language-bash"><code class="language-bash code-highlight"><span class="code-line">├┈ CMakeLists.txt <span class="token comment"># 希望运行的 CMake 命令</span>
|
||||
</span><span class="code-line">╰┈ main.cpp <span class="token comment"># 带有 main 的源文件</span>
|
||||
<pre class="language-bash"><code class="language-bash code-highlight"><span class="code-line">├── CMakeLists.txt <span class="token comment"># 希望运行的 CMake命令</span>
|
||||
</span><span class="code-line">├── main.cpp <span class="token comment"># 带有main 的源文件</span>
|
||||
</span><span class="code-line">├── include <span class="token comment"># 头文件目录</span>
|
||||
</span><span class="code-line">│ └── header.h
|
||||
</span><span class="code-line">└── src <span class="token comment"># 源代码目录</span>
|
||||
</span><span class="code-line"> ├── a.c
|
||||
</span><span class="code-line"> └── b.c
|
||||
</span></code></pre>
|
||||
<p>在此项目上运行 <code>CMake</code> 时,系统会要求您提供二进制目录,运行 <code>CMake</code> 不会创建最终的可执行文件,而是会为 <code>Visual Studio</code>、<code>XCode</code> 或 <code>makefile</code> 生成项目文件。 使用这些工具构建该项目</p>
|
||||
<h4 id="cmakeliststxt"><a aria-hidden="true" tabindex="-1" href="#cmakeliststxt"><span class="icon icon-link"></span></a>CMakeLists.txt</h4>
|
||||
@ -56,6 +61,18 @@
|
||||
</span><span class="code-line"><span class="token keyword">project</span> <span class="token punctuation">(</span>hello_cmake<span class="token punctuation">)</span>
|
||||
</span><span class="code-line"><span class="token comment"># 添加可执行文件</span>
|
||||
</span><span class="code-line"><span class="token keyword">add_executable</span><span class="token punctuation">(</span>hello_cmake main.cpp<span class="token punctuation">)</span>
|
||||
</span><span class="code-line"><span class="token comment"># 添加头文件目录</span>
|
||||
</span><span class="code-line"><span class="token keyword">target_include_directories</span><span class="token punctuation">(</span>hello_cmake <span class="token namespace">PRIVATE</span> ./include<span class="token punctuation">)</span>
|
||||
</span><span class="code-line"><span class="token comment"># 批量添加源文件</span>
|
||||
</span><span class="code-line"><span class="token keyword">file</span><span class="token punctuation">(</span>GLOB SRCS CONFIGURE_DEPENDS ./src/*.cpp<span class="token punctuation">)</span>
|
||||
</span><span class="code-line"><span class="token keyword">target_sources</span><span class="token punctuation">(</span>hello_cmake <span class="token namespace">PUBLIC</span> <span class="token punctuation">${</span>SRCS<span class="token punctuation">}</span><span class="token punctuation">)</span>
|
||||
</span><span class="code-line"><span class="token comment"># 添加第三方库</span>
|
||||
</span><span class="code-line"><span class="token keyword">find_package</span><span class="token punctuation">(</span>OpenGL CONFIG REQUIRED<span class="token punctuation">)</span>
|
||||
</span><span class="code-line"><span class="token comment"># 链接第三方库</span>
|
||||
</span><span class="code-line"><span class="token keyword">target_link_libraries</span><span class="token punctuation">(</span>hello_cmake <span class="token namespace">PRIVATE</span> OpenGL<span class="token punctuation">)</span>
|
||||
</span><span class="code-line"><span class="token comment"># 指定输出路径</span>
|
||||
</span><span class="code-line"><span class="token keyword">set_property</span><span class="token punctuation">(</span>TARGET hello_cmake <span class="token punctuation">${</span><span class="token variable">CMAKE_SOURCE_DIR</span><span class="token punctuation">}</span>/bin<span class="token punctuation">)</span>
|
||||
</span><span class="code-line">
|
||||
</span></code></pre>
|
||||
<h4 id="maincpp"><a aria-hidden="true" tabindex="-1" href="#maincpp"><span class="icon icon-link"></span></a>main.cpp</h4>
|
||||
<pre class="language-c"><code class="language-c code-highlight"><span class="code-line"><span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">include</span> <span class="token string"><iostream></span></span>
|
||||
@ -70,10 +87,11 @@
|
||||
<pre class="language-bash"><code class="language-bash code-highlight"><span class="code-line">$ <span class="token function">mkdir</span> build <span class="token comment"># 创建 build 目录</span>
|
||||
</span><span class="code-line">$ <span class="token builtin class-name">cd</span> build <span class="token comment"># 进入目录</span>
|
||||
</span><span class="code-line">$ cmake <span class="token punctuation">..</span> <span class="token comment"># 目录的上一级目录运行命令</span>
|
||||
</span><span class="code-line">$ <span class="token function">make</span> <span class="token comment"># 使用对应的编译工具</span>
|
||||
</span><span class="code-line">$ ./hello_cmake <span class="token comment"># 运行生成的 hello_cmake</span>
|
||||
</span><span class="code-line">Hello CMake<span class="token operator">!</span>
|
||||
</span></code></pre>
|
||||
</div></div></div><div class="wrap h3body-not-exist col-span-2"><div class="wrap-header h3wrap"><h3 id="cmake"><a aria-hidden="true" tabindex="-1" href="#cmake"><span class="icon icon-link"></span></a>cmake</h3><div class="wrap-body">
|
||||
</div></div></div><div class="wrap h3body-exist col-span-2"><div class="wrap-header h3wrap"><h3 id="cmake"><a aria-hidden="true" tabindex="-1" href="#cmake"><span class="icon icon-link"></span></a>cmake</h3><div class="wrap-body">
|
||||
<!--rehype:wrap-class=col-span-2-->
|
||||
<p>生成项目构建系统</p>
|
||||
<pre class="language-bash"><code class="language-bash code-highlight"><span class="code-line">$ cmake <span class="token punctuation">[</span><span class="token operator"><</span>options<span class="token operator">></span><span class="token punctuation">]</span> <span class="token operator"><</span>path-to-source <span class="token operator">|</span> path-to-existing-build<span class="token operator">></span>bash
|
||||
@ -85,6 +103,9 @@
|
||||
<p>安装项目</p>
|
||||
<pre class="language-bash"><code class="language-bash code-highlight"><span class="code-line">$ cmake <span class="token parameter variable">--install</span> <span class="token operator"><</span>dir<span class="token operator">></span> <span class="token punctuation">[</span><span class="token operator"><</span>options<span class="token operator">></span><span class="token punctuation">]</span>
|
||||
</span></code></pre>
|
||||
<p>运行指定项目</p>
|
||||
<pre class="language-bash"><code class="language-bash code-highlight"><span class="code-line">cmake <span class="token parameter variable">--build</span> <span class="token operator"><</span>dir<span class="token operator">></span> <span class="token parameter variable">--target</span> <span class="token operator"><</span>project<span class="token operator">></span>
|
||||
</span></code></pre>
|
||||
<p>打开一个项目</p>
|
||||
<pre class="language-bash"><code class="language-bash code-highlight"><span class="code-line">$ cmake <span class="token parameter variable">--open</span> <span class="token operator"><</span>dir<span class="token operator">></span>
|
||||
</span></code></pre>
|
||||
@ -103,6 +124,28 @@
|
||||
<p>查看帮助</p>
|
||||
<pre class="language-bash"><code class="language-bash code-highlight"><span class="code-line">$ cmake --help<span class="token punctuation">[</span>-<span class="token operator"><</span>topic<span class="token operator">></span><span class="token punctuation">]</span>
|
||||
</span></code></pre>
|
||||
<h4 id="常用参数"><a aria-hidden="true" tabindex="-1" href="#常用参数"><span class="icon icon-link"></span></a>常用参数</h4>
|
||||
<ul>
|
||||
<li>方式一: 在<code>CMakeLists.txt</code>中使用<code>set(KEY VAL)</code>函数</li>
|
||||
<li>方式二: 在执行<code>cmake ...</code> -D<arg> 指定(只需一次,推荐)</arg></li>
|
||||
</ul>
|
||||
<pre class="language-cmake"><code class="language-cmake code-highlight"><span class="code-line"><span class="token comment"># 指定编译参数(Debug/Release/MinSizeRel/RelWithDebInfo)</span>
|
||||
</span><span class="code-line">$ cmake ... -D <span class="token variable">CMAKE_BUILD_TYPE</span>=DEBUG
|
||||
</span><span class="code-line"><span class="token comment"># 指定编译链工具(windows下vcpkg需要)</span>
|
||||
</span><span class="code-line">$ cmake ... -D <span class="token variable">CMAKE_TOOLCHAIN_FILE</span>=<vcpkg_path<span class="token punctuation">></span>/scripts/buildsystems/vcpkg.cmake
|
||||
</span><span class="code-line"><span class="token comment"># 指定编译器</span>
|
||||
</span><span class="code-line">$ cmake ... -D CAMKE_C_COMPILER=...
|
||||
</span><span class="code-line">$ cmake ... -D CAMKE_CXX_COMPILER=...
|
||||
</span><span class="code-line"><span class="token comment"># 指定生成器</span>
|
||||
</span><span class="code-line">$ cmake .. -G <span class="token string">"Unix Makefile"</span>
|
||||
</span><span class="code-line">$ cmake .. -G <span class="token string">"Ninja"</span>
|
||||
</span><span class="code-line">$ cmake .. -G <span class="token string">"Visual Studio 17 2022"</span>
|
||||
</span><span class="code-line">
|
||||
</span><span class="code-line"><span class="token comment"># 设置Cpp标准</span>
|
||||
</span><span class="code-line"><span class="token keyword">set</span><span class="token punctuation">(</span><span class="token variable">CMAKE_CXX_STANDARD</span> <span class="token number">17</span><span class="token punctuation">)</span>
|
||||
</span><span class="code-line"><span class="token keyword">set</span><span class="token punctuation">(</span><span class="token variable">CMAKE_CXX_STANDARD_REQUIRED</span> <span class="token boolean">ON</span><span class="token punctuation">)</span> <span class="token comment"># 在检测到不支持时出错</span>
|
||||
</span><span class="code-line"><span class="token keyword">set</span><span class="token punctuation">(</span><span class="token variable">CMAKE_CXX_EXTENSIONS</span> <span class="token boolean">ON</span><span class="token punctuation">)</span> <span class="token comment">#一般设为off,否则在msvc上没有特性会出错</span>
|
||||
</span></code></pre>
|
||||
</div></div></div></div></div><div class="wrap h2body-not-exist"><div class="wrap-header h2wrap"><h2 id="另见"><a aria-hidden="true" tabindex="-1" href="#另见"><span class="icon icon-link"></span></a>另见</h2><div class="wrap-body">
|
||||
<ul>
|
||||
<li><a href="http://ttroy50.github.io/cmake-examples/">CMake Examples</a> <em>(ttroy50.github.io)</em></li>
|
||||
|
Reference in New Issue
Block a user