Files
clice/zh/dev/build.html
2025-11-15 18:17:57 +00:00

28 lines
25 KiB
HTML
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!DOCTYPE html>
<html lang="en-US" dir="ltr">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<title>Build from Source | clice</title>
<meta name="description" content="a powerful and modern C++ language server">
<meta name="generator" content="VitePress v1.6.4">
<link rel="preload stylesheet" href="/assets/style.B6tXkhGK.css" as="style">
<link rel="preload stylesheet" href="/vp-icons.css" as="style">
<script type="module" src="/assets/app.7KCFXIFk.js"></script>
<link rel="preload" href="/assets/inter-roman-latin.Di8DUHzh.woff2" as="font" type="font/woff2" crossorigin="">
<link rel="modulepreload" href="/assets/chunks/theme.rf236kCY.js">
<link rel="modulepreload" href="/assets/chunks/framework.D8webtH5.js">
<link rel="modulepreload" href="/assets/zh_dev_build.md.C5-ImQeZ.lean.js">
<script id="check-dark-mode">(()=>{const e=localStorage.getItem("vitepress-theme-appearance")||"auto",a=window.matchMedia("(prefers-color-scheme: dark)").matches;(!e||e==="auto"?a:e==="dark")&&document.documentElement.classList.add("dark")})();</script>
<script id="check-mac-os">document.documentElement.classList.toggle("mac",/Mac|iPhone|iPod|iPad/i.test(navigator.platform));</script>
</head>
<body>
<div id="app"><div class="Layout" data-v-d8b57b2d><!--[--><!--]--><!--[--><span tabindex="-1" data-v-fcbfc0e0></span><a href="#VPContent" class="VPSkipLink visually-hidden" data-v-fcbfc0e0>Skip to content</a><!--]--><!----><header class="VPNav" data-v-d8b57b2d data-v-7ad780c2><div class="VPNavBar" data-v-7ad780c2 data-v-9fd4d1dd><div class="wrapper" data-v-9fd4d1dd><div class="container" data-v-9fd4d1dd><div class="title" data-v-9fd4d1dd><div class="VPNavBarTitle has-sidebar" data-v-9fd4d1dd data-v-9f43907a><a class="title" href="/zh/" data-v-9f43907a><!--[--><!--]--><!----><span data-v-9f43907a>clice</span><!--[--><!--]--></a></div></div><div class="content" data-v-9fd4d1dd><div class="content-body" data-v-9fd4d1dd><!--[--><!--]--><div class="VPNavBarSearch search" data-v-9fd4d1dd><!----></div><nav aria-labelledby="main-nav-aria-label" class="VPNavBarMenu menu" data-v-9fd4d1dd data-v-afb2845e><span id="main-nav-aria-label" class="visually-hidden" data-v-afb2845e> Main Navigation </span><!--[--><!--[--><a class="VPLink link VPNavBarMenuLink" href="/" tabindex="0" data-v-afb2845e data-v-815115f5><!--[--><span data-v-815115f5>Home</span><!--]--></a><!--]--><!--]--></nav><div class="VPFlyout VPNavBarTranslations translations" data-v-9fd4d1dd data-v-acee064b data-v-bfe7971f><button type="button" class="button" aria-haspopup="true" aria-expanded="false" aria-label="Change language" data-v-bfe7971f><span class="text" data-v-bfe7971f><span class="vpi-languages option-icon" data-v-bfe7971f></span><!----><span class="vpi-chevron-down text-icon" data-v-bfe7971f></span></span></button><div class="menu" data-v-bfe7971f><div class="VPMenu" data-v-bfe7971f data-v-20ed86d6><!----><!--[--><!--[--><div class="items" data-v-acee064b><p class="title" data-v-acee064b>简体中文</p><!--[--><div class="VPMenuLink" data-v-acee064b data-v-7eeeb2dc><a class="VPLink link" href="/dev/build" data-v-7eeeb2dc><!--[--><span data-v-7eeeb2dc>English</span><!--]--></a></div><!--]--></div><!--]--><!--]--></div></div></div><div class="VPNavBarAppearance appearance" data-v-9fd4d1dd data-v-3f90c1a5><button class="VPSwitch VPSwitchAppearance" type="button" role="switch" title aria-checked="false" data-v-3f90c1a5 data-v-be9742d9 data-v-b4ccac88><span class="check" data-v-b4ccac88><span class="icon" data-v-b4ccac88><!--[--><span class="vpi-sun sun" data-v-be9742d9></span><span class="vpi-moon moon" data-v-be9742d9></span><!--]--></span></span></button></div><div class="VPSocialLinks VPNavBarSocialLinks social-links" data-v-9fd4d1dd data-v-ef6192dc data-v-e71e869c><!--[--><a class="VPSocialLink no-icon" href="https://discord.gg/PA3UxW2VA3" aria-label="discord" target="_blank" rel="noopener" data-v-e71e869c data-v-60a9a2d3><span class="vpi-social-discord"></span></a><a class="VPSocialLink no-icon" href="https://github.com/clice-io/clice" aria-label="github" target="_blank" rel="noopener" data-v-e71e869c data-v-60a9a2d3><span class="vpi-social-github"></span></a><!--]--></div><div class="VPFlyout VPNavBarExtra extra" data-v-9fd4d1dd data-v-f953d92f data-v-bfe7971f><button type="button" class="button" aria-haspopup="true" aria-expanded="false" aria-label="extra navigation" data-v-bfe7971f><span class="vpi-more-horizontal icon" data-v-bfe7971f></span></button><div class="menu" data-v-bfe7971f><div class="VPMenu" data-v-bfe7971f data-v-20ed86d6><!----><!--[--><!--[--><div class="group translations" data-v-f953d92f><p class="trans-title" data-v-f953d92f>简体中文</p><!--[--><div class="VPMenuLink" data-v-f953d92f data-v-7eeeb2dc><a class="VPLink link" href="/dev/build" data-v-7eeeb2dc><!--[--><span data-v-7eeeb2dc>English</span><!--]--></a></div><!--]--></div><div class="group" data-v-f953d92f><div class="item appearance" data-v-f953d92f><p class="label" data-v-f953d92f>Appearance</p><div class="appearance-action" data-v-f953d92f><button class="VPSwitch VPSwitchAppearance" type="button" role="switch" title aria-checked="false" data-v-f953d92f data-v-be9742d9 data-v-b4ccac88><span class="check" data-v-b4ccac88><span class="icon" data-v-b4ccac88><!--[--><span class="vpi-sun sun" data-v-be9742d9></span><span class="vpi-moon moon" data-v-be9742d9></span><!--]--></span></span></button></div></div></div><div class="group" data-v-f953d92f><div class="item social-links" data-v-f953d92f><div class="VPSocialLinks social-links-list" data-v-f953d92f data-v-e71e869c><!--[--><a class="VPSocialLink no-icon" href="https://discord.gg/PA3UxW2VA3" aria-label="discord" target="_blank" rel="noopener" data-v-e71e869c data-v-60a9a2d3><span class="vpi-social-discord"></span></a><a class="VPSocialLink no-icon" href="https://github.com/clice-io/clice" aria-label="github" target="_blank" rel="noopener" data-v-e71e869c data-v-60a9a2d3><span class="vpi-social-github"></span></a><!--]--></div></div></div><!--]--><!--]--></div></div></div><!--[--><!--]--><button type="button" class="VPNavBarHamburger hamburger" aria-label="mobile navigation" aria-expanded="false" aria-controls="VPNavScreen" data-v-9fd4d1dd data-v-6bee1efd><span class="container" data-v-6bee1efd><span class="top" data-v-6bee1efd></span><span class="middle" data-v-6bee1efd></span><span class="bottom" data-v-6bee1efd></span></span></button></div></div></div></div><div class="divider" data-v-9fd4d1dd><div class="divider-line" data-v-9fd4d1dd></div></div></div><!----></header><div class="VPLocalNav has-sidebar empty" data-v-d8b57b2d data-v-2488c25a><div class="container" data-v-2488c25a><button class="menu" aria-expanded="false" aria-controls="VPSidebarNav" data-v-2488c25a><span class="vpi-align-left menu-icon" data-v-2488c25a></span><span class="menu-text" data-v-2488c25a>Menu</span></button><div class="VPLocalNavOutlineDropdown" style="--vp-vh:0px;" data-v-2488c25a data-v-6b867909><button data-v-6b867909>Return to top</button><!----></div></div></div><aside class="VPSidebar" data-v-d8b57b2d data-v-42c4c606><div class="curtain" data-v-42c4c606></div><nav class="nav" id="VPSidebarNav" aria-labelledby="sidebar-aria-label" tabindex="-1" data-v-42c4c606><span class="visually-hidden" id="sidebar-aria-label" data-v-42c4c606> Sidebar Navigation </span><!--[--><!--]--><!--[--><div class="no-transition group" data-v-51288d80><section class="VPSidebarItem level-0 collapsible" data-v-51288d80 data-v-0009425e><div class="item" role="button" tabindex="0" data-v-0009425e><div class="indicator" data-v-0009425e></div><h2 class="text" data-v-0009425e>Design</h2><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-0009425e><span class="vpi-chevron-right caret-icon" data-v-0009425e></span></div></div><div class="items" data-v-0009425e><!--[--><div class="VPSidebarItem level-1 is-link" data-v-0009425e data-v-0009425e><div class="item" data-v-0009425e><div class="indicator" data-v-0009425e></div><a class="VPLink link link" href="/zh/design/architecture" data-v-0009425e><!--[--><p class="text" data-v-0009425e>Architecture</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0009425e data-v-0009425e><div class="item" data-v-0009425e><div class="indicator" data-v-0009425e></div><a class="VPLink link link" href="/zh/design/compilation" data-v-0009425e><!--[--><p class="text" data-v-0009425e>Compilation</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0009425e data-v-0009425e><div class="item" data-v-0009425e><div class="indicator" data-v-0009425e></div><a class="VPLink link link" href="/zh/design/header-context" data-v-0009425e><!--[--><p class="text" data-v-0009425e>Header Context</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0009425e data-v-0009425e><div class="item" data-v-0009425e><div class="indicator" data-v-0009425e></div><a class="VPLink link link" href="/zh/design/template-resolver" data-v-0009425e><!--[--><p class="text" data-v-0009425e>Template Resolver</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><div class="no-transition group" data-v-51288d80><section class="VPSidebarItem level-0 collapsible has-active" data-v-51288d80 data-v-0009425e><div class="item" role="button" tabindex="0" data-v-0009425e><div class="indicator" data-v-0009425e></div><h2 class="text" data-v-0009425e>Development</h2><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-0009425e><span class="vpi-chevron-right caret-icon" data-v-0009425e></span></div></div><div class="items" data-v-0009425e><!--[--><div class="VPSidebarItem level-1 is-link" data-v-0009425e data-v-0009425e><div class="item" data-v-0009425e><div class="indicator" data-v-0009425e></div><a class="VPLink link link" href="/zh/dev/build" data-v-0009425e><!--[--><p class="text" data-v-0009425e>Build from Source</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0009425e data-v-0009425e><div class="item" data-v-0009425e><div class="indicator" data-v-0009425e></div><a class="VPLink link link" href="/zh/dev/contribution" data-v-0009425e><!--[--><p class="text" data-v-0009425e>Contribution</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0009425e data-v-0009425e><div class="item" data-v-0009425e><div class="indicator" data-v-0009425e></div><a class="VPLink link link" href="/zh/dev/test-and-debug" data-v-0009425e><!--[--><p class="text" data-v-0009425e>Test and Debug</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><div class="no-transition group" data-v-51288d80><section class="VPSidebarItem level-0 collapsible" data-v-51288d80 data-v-0009425e><div class="item" role="button" tabindex="0" data-v-0009425e><div class="indicator" data-v-0009425e></div><h2 class="text" data-v-0009425e>Guide</h2><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-0009425e><span class="vpi-chevron-right caret-icon" data-v-0009425e></span></div></div><div class="items" data-v-0009425e><!--[--><div class="VPSidebarItem level-1 is-link" data-v-0009425e data-v-0009425e><div class="item" data-v-0009425e><div class="indicator" data-v-0009425e></div><a class="VPLink link link" href="/zh/guide/configuration" data-v-0009425e><!--[--><p class="text" data-v-0009425e>Configuration</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0009425e data-v-0009425e><div class="item" data-v-0009425e><div class="indicator" data-v-0009425e></div><a class="VPLink link link" href="/zh/guide/quick-start" data-v-0009425e><!--[--><p class="text" data-v-0009425e>Quick Start</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0009425e data-v-0009425e><div class="item" data-v-0009425e><div class="indicator" data-v-0009425e></div><a class="VPLink link link" href="/zh/guide/what-is-clice" data-v-0009425e><!--[--><p class="text" data-v-0009425e>What is clice?</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><!--]--><!--[--><!--]--></nav></aside><div class="VPContent has-sidebar" id="VPContent" data-v-d8b57b2d data-v-9a6c75ad><div class="VPDoc has-sidebar has-aside" data-v-9a6c75ad data-v-e6f2a212><!--[--><!--]--><div class="container" data-v-e6f2a212><div class="aside" data-v-e6f2a212><div class="aside-curtain" data-v-e6f2a212></div><div class="aside-container" data-v-e6f2a212><div class="aside-content" data-v-e6f2a212><div class="VPDocAside" data-v-e6f2a212 data-v-cb998dce><!--[--><!--]--><!--[--><!--]--><nav aria-labelledby="doc-outline-aria-label" class="VPDocAsideOutline" data-v-cb998dce data-v-f610f197><div class="content" data-v-f610f197><div class="outline-marker" data-v-f610f197></div><div aria-level="2" class="outline-title" id="doc-outline-aria-label" role="heading" data-v-f610f197>On this page</div><ul class="VPDocOutlineItem root" data-v-f610f197 data-v-53c99d69><!--[--><!--]--></ul></div></nav><!--[--><!--]--><div class="spacer" data-v-cb998dce></div><!--[--><!--]--><!----><!--[--><!--]--><!--[--><!--]--></div></div></div></div><div class="content" data-v-e6f2a212><div class="content-container" data-v-e6f2a212><!--[--><!--]--><main class="main" data-v-e6f2a212><div style="position:relative;" class="vp-doc _zh_dev_build" data-v-e6f2a212><div><h1 id="build-from-source" tabindex="-1">Build from Source <a class="header-anchor" href="#build-from-source" aria-label="Permalink to &quot;Build from Source&quot;"></a></h1><h2 id="supported-platforms" tabindex="-1">Supported Platforms <a class="header-anchor" href="#supported-platforms" aria-label="Permalink to &quot;Supported Platforms&quot;"></a></h2><ul><li>Windows</li><li>Linux</li><li>MacOS</li></ul><h2 id="prerequisite" tabindex="-1">Prerequisite <a class="header-anchor" href="#prerequisite" aria-label="Permalink to &quot;Prerequisite&quot;"></a></h2><ul><li>cmake/xmake</li><li>clang, lld &gt;= 20</li><li>c++23 <strong>compatible</strong> standard library <ul><li>MSVC STL &gt;= 19.44(VS 2022 17.4)</li><li>GCC libstdc++ &gt;= 14</li><li>Clang libc++ &gt;= 20</li></ul></li></ul><p>clice 使用 C++23 作为语言标准,请确保有可用的 clang 20 以及以上的编译器,以及兼容 C++23 的标准库。clice 依赖 lld 作为链接器。请确保你的 clang 工具链可以找到它(通常 clang 发行版会自带 lld或者你需要单独安装 lld-20 包)。</p><blockquote><p>clice 目前只保证能使用 clang 编译CI 测试保证)。对于 gcc 和 msvc 的兼容,我们尽力而为,但不会在 CI 中添加对应的测试。如果遇到任何问题,欢迎贡献。</p></blockquote><h2 id="cmake" tabindex="-1">CMake <a class="header-anchor" href="#cmake" aria-label="Permalink to &quot;CMake&quot;"></a></h2><p>使用如下的命令构建 clice</p><div class="language-shell vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">shell</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">cmake</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -B</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> build</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -DCMAKE_BUILD_TYPE=RelWithDebInfo</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -DCMAKE_C_COMPILER=clang</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -DCMAKE_CXX_COMPILER=clang++</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">cmake</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> --build</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> build</span></span></code></pre></div><p>可选的构建选项:</p><table tabindex="0"><thead><tr><th>选项</th><th>默认值</th><th>效果</th></tr></thead><tbody><tr><td>LLVM_INSTALL_PATH</td><td>&quot;&quot;</td><td>使用自定义路径的 llvm libs 来构建 clice</td></tr><tr><td>CLICE_ENABLE_TEST</td><td>OFF</td><td>是否构建 clice 的单元测试</td></tr><tr><td>CLICE_USE_LIBCXX</td><td>OFF</td><td>是否使用 libc++ 来构建 clice添加 <code>-std=libc++</code>),如果开启,请确保 llvm libs 也是使用 libc++ 编译的</td></tr><tr><td>CLICE_CI_ENVIRONMENT</td><td>OFF</td><td>是否打开 <code>CLICE_CI_ENVIRONMENT</code> 这个宏,有些测试在 CI 环境才会执行</td></tr></tbody></table><h2 id="xmake" tabindex="-1">XMake <a class="header-anchor" href="#xmake" aria-label="Permalink to &quot;XMake&quot;"></a></h2><p>使用如下的命令即可构建 clice</p><div class="language-bash vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">xmake</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> f</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -c</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> --mode=releasedbg</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> --toolchain=clang</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">xmake</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> build</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> --all</span></span></code></pre></div><p>可选的构建选项:</p><table tabindex="0"><thead><tr><th>选项</th><th>默认值</th><th>效果</th></tr></thead><tbody><tr><td>--llvm</td><td>&quot;&quot;</td><td>使用自定义路径的 llvm libs 来构建 clice</td></tr><tr><td>--enable_test</td><td>false</td><td>是否构建 clice 的单元测试</td></tr><tr><td>--ci</td><td>false</td><td>是否打开 <code>CLICE_CI_ENVIRONMENT</code></td></tr></tbody></table><h2 id="a-note-on-llvm-libs" tabindex="-1">A Note on LLVM Libs <a class="header-anchor" href="#a-note-on-llvm-libs" aria-label="Permalink to &quot;A Note on LLVM Libs&quot;"></a></h2><p>由于 C++ 的语法太过复杂,自己编写一个新的 parser 是不现实的。clice 调用 clang 的 API 来 parse C++ 源文件获取 AST这意味它需要链接 llvm/clang libs。由于 clice 使用了 clang 的私有头文件,这些私有头文件在 llvm 发布的 binary release 中是没有的,所以不能直接使用系统的 llvm package。</p><ol><li>我们在 <a href="https://github.com/clice-io/clice-llvm/releases" target="_blank" rel="noreferrer">clice-llvm</a> 上会发布使用的 llvm 版本的预编译二进制,用于 CI 或者 release 构建。在构建时 cmake 和 xmake 默认会从此处下载 llvm libs 然后使用,</li></ol><div class="important custom-block github-alert"><p class="custom-block-title">IMPORTANT</p><p></p><p>对于 debug 版本的 llvm libs构建的时候我们开启了 address sanitizer而 address sanitizer 依赖于 compiler rt它对编译器版本十分敏感。所以如果使用 debug 版本,请确保你的 clang 的 compiler rt 版本和我们构建的时候<strong>严格一致</strong></p><ul><li>Windows 暂时没有 debug 构建的 llvm libs因为它不支持将 clang 构建为动态库,相关的进展在 <a href="https://github.com/clice-io/clice/issues/42" target="_blank" rel="noreferrer">这里</a> 跟踪</li><li>Linux 使用 clang20</li><li>MacOS 使用 homebrew llvm@20<strong>不要使用 apple clang</strong></li></ul><p>可以参考 CI 中的 <a href="https://github.com/clice-io/clice/blob/main/.github/workflows/cmake.yml" target="_blank" rel="noreferrer">cmake</a><a href="https://github.com/clice-io/clice/blob/main/.github/workflows/xmake.yml" target="_blank" rel="noreferrer">xmake</a> 文件作为参考,它们与预编译 llvm libs 的环境保持严格一致。</p></div><ol start="2"><li>自己重新一个与当前环境一致的 llvm/clang。如果默认的预编译二进制文件方法 1在你的系统上因 ABI 或库版本(如 glibc不兼容而运行失败或者你需要一个自定义的 Debug 版本,那么我们推荐你使用此方法从头编译 llvm libs。我们提供了一个脚本用于构建 clice 所需要的 llvm libs<a href="https://github.com/clice-io/clice/blob/main/scripts/build-llvm-libs.py" target="_blank" rel="noreferrer">build-llvm-libs.py</a></li></ol><div class="language-bash vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">cd</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> llvm-project</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">python3</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> &lt;</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">clic</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">e</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">&gt;</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">/scripts/build-llvm-libs.py</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> debug</span></span></code></pre></div><p>也可以参考 llvm 的官方构建教程 <a href="https://llvm.org/docs/CMake.html" target="_blank" rel="noreferrer">Building LLVM with CMake</a></p></div></div></main><footer class="VPDocFooter" data-v-e6f2a212 data-v-1bcd8184><!--[--><!--]--><!----><nav class="prev-next" aria-labelledby="doc-footer-aria-label" data-v-1bcd8184><span class="visually-hidden" id="doc-footer-aria-label" data-v-1bcd8184>Pager</span><div class="pager" data-v-1bcd8184><a class="VPLink link pager-link prev" href="/zh/design/template-resolver" data-v-1bcd8184><!--[--><span class="desc" data-v-1bcd8184>Previous page</span><span class="title" data-v-1bcd8184>Template Resolver</span><!--]--></a></div><div class="pager" data-v-1bcd8184><a class="VPLink link pager-link next" href="/zh/dev/contribution" data-v-1bcd8184><!--[--><span class="desc" data-v-1bcd8184>Next page</span><span class="title" data-v-1bcd8184>Contribution</span><!--]--></a></div></nav></footer><!--[--><!--]--></div></div></div><!--[--><!--]--></div></div><!----><!--[--><!--]--></div></div>
<script>window.__VP_HASH_MAP__=JSON.parse("{\"design_architecture.md\":\"B1nOS2BF\",\"design_compilation.md\":\"CCvAsCts\",\"design_header-context.md\":\"BxMpdImS\",\"design_index.md\":\"iLhzg_qd\",\"design_template-resolver.md\":\"BWRB2TFl\",\"dev_build.md\":\"pZgZRssl\",\"dev_contribution.md\":\"BDlGKyx4\",\"dev_test-and-debug.md\":\"BDhcoSZa\",\"guide_configuration.md\":\"BX4EXUeC\",\"guide_quick-start.md\":\"GKsihDbV\",\"guide_what-is-clice.md\":\"BMyw_-9E\",\"index.md\":\"JdQy7MpZ\",\"zh_design_architecture.md\":\"BVGXXj2L\",\"zh_design_compilation.md\":\"BpkOwlT8\",\"zh_design_header-context.md\":\"6ANkDXaY\",\"zh_design_index.md\":\"CRxI2HZv\",\"zh_design_template-resolver.md\":\"C8xOYUnS\",\"zh_dev_build.md\":\"C5-ImQeZ\",\"zh_dev_contribution.md\":\"DouHFQDZ\",\"zh_dev_test-and-debug.md\":\"CECWy0Lv\",\"zh_guide_configuration.md\":\"YRqjuVKw\",\"zh_guide_quick-start.md\":\"BIzdzWD6\",\"zh_guide_what-is-clice.md\":\"D_fcfWi8\",\"zh_index.md\":\"DZmqz5yo\"}");window.__VP_SITE_DATA__=JSON.parse("{\"lang\":\"en-US\",\"dir\":\"ltr\",\"title\":\"clice\",\"description\":\"a powerful and modern C++ language server\",\"base\":\"/\",\"head\":[],\"router\":{\"prefetchLinks\":true},\"appearance\":true,\"themeConfig\":{\"nav\":[{\"text\":\"Home\",\"link\":\"/\"}],\"sidebar\":{\"/zh/\":[{\"text\":\"Design\",\"collapsed\":false,\"items\":[{\"text\":\"Architecture\",\"link\":\"/zh/design/architecture\"},{\"text\":\"Compilation\",\"link\":\"/zh/design/compilation\"},{\"text\":\"Header Context\",\"link\":\"/zh/design/header-context\"},{\"text\":\"Template Resolver\",\"link\":\"/zh/design/template-resolver\"}]},{\"text\":\"Development\",\"collapsed\":false,\"items\":[{\"text\":\"Build from Source\",\"link\":\"/zh/dev/build\"},{\"text\":\"Contribution\",\"link\":\"/zh/dev/contribution\"},{\"text\":\"Test and Debug\",\"link\":\"/zh/dev/test-and-debug\"}]},{\"text\":\"Guide\",\"collapsed\":false,\"items\":[{\"text\":\"Configuration\",\"link\":\"/zh/guide/configuration\"},{\"text\":\"Quick Start\",\"link\":\"/zh/guide/quick-start\"},{\"text\":\"What is clice?\",\"link\":\"/zh/guide/what-is-clice\"}]}],\"/\":[{\"text\":\"Design\",\"collapsed\":false,\"items\":[{\"text\":\"Architecture\",\"link\":\"/design/architecture\"},{\"text\":\"Compilation\",\"link\":\"/design/compilation\"},{\"text\":\"Header Context\",\"link\":\"/design/header-context\"},{\"text\":\"Template Resolver\",\"link\":\"/design/template-resolver\"}]},{\"text\":\"Development\",\"collapsed\":false,\"items\":[{\"text\":\"Build from Source\",\"link\":\"/dev/build\"},{\"text\":\"Contribution\",\"link\":\"/dev/contribution\"},{\"text\":\"Test and Debug\",\"link\":\"/dev/test-and-debug\"}]},{\"text\":\"Guide\",\"collapsed\":false,\"items\":[{\"text\":\"Configuration\",\"link\":\"/guide/configuration\"},{\"text\":\"Quick Start\",\"link\":\"/guide/quick-start\"},{\"text\":\"What is clice?\",\"link\":\"/guide/what-is-clice\"}]}]},\"socialLinks\":[{\"icon\":\"discord\",\"link\":\"https://discord.gg/PA3UxW2VA3\"},{\"icon\":\"github\",\"link\":\"https://github.com/clice-io/clice\"}],\"outline\":\"deep\"},\"locales\":{\"root\":{\"label\":\"English\"},\"zh\":{\"label\":\"简体中文\"}},\"scrollOffset\":134,\"cleanUrls\":true}");</script>
</body>
</html>