首页 > 其他分享 >LLVM+CMAKE+VScode

LLVM+CMAKE+VScode

时间:2025-02-08 23:18:51浏览次数:3  
标签:opt llvm CMAKE VScode clang headers json LLVM --

在mac上使用vscode+CMAKE+LLVM 配置C++环境

仅供参考,请多谅解

原先的vscode官方推荐插件intellisense实在是太慢,以至于在很多大型项目(ns3,OS)等进行静态检查的速度奇慢无比,并且大量消耗资源。于是尝试在mac上使用llvm+clangd进行配置。由于采用的是homebrew安装clang19,因此在arm64的linux上的配置还没有探索出来QAQ

目前环境:

img

安装llvm@19

首先安装好我们的llvm:brew install llvm

img

笔者安装了llvm@19。请自行找好二进制文件的路径,这对我们很重要!

img

brew安装后开箱可用(一般),笔者没有遇到很奇怪的问题。当然你有可能发现原先系统自带的clang会优先于你安装的clang响应,你可以强行设置一个软链接即可。(具有风险其实,不推荐)

sudo ln -s /opt/homebrew/Cellar/llvm/19.1.7/bin/clang /usr/bin/clang
sudo ln -s /opt/homebrew/Cellar/llvm/19.1.7/bin/clang++ /usr/bin/clang++

接下来就可以配置我们的vscode了。

下载插件

卸载掉原先的C/C++ 拓展包(基于MSVC编译器的规则会与LLVM有冲突)。

img

安装下面LLVM提供的一些集成插件:

img

创建文件夹进行配置

我们的文件夹(工作区)结构如下:

.
├── CMakeLists.txt
├── build
├── cmake.sh
├── include
│   └── headers.hpp
└── src
    ├── headers.cpp
    └── main.cpp

首先进行Cmake文件的编写。我们需要将headers.cpp做成静态库,main.cpp为可执行文件。我们有:

# The minimum required version.
cmake_minimum_required(VERSION 3.10)
# We have to specify compiler for llvm19 because I want to try llvm@19!
set(CMAKE_C_COMPILER "/opt/homebrew/opt/llvm/bin/clang")
set(CMAKE_CXX_COMPILER "/opt/homebrew/opt/llvm/bin/clang++")
# open all the tips.
set(CMAKE_VERBOSE_MAKEFILE ON)

# We need compile commands.
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)

# show the project name.
project(main VERSION 1.0)

# The headers should be searched here.
include_directories(${PROJECT_SOURCE_DIR}/include)

# Add the headers and the source files here.
add_library(MyLibrary src/headers.cpp)
add_executable(main src/main.cpp)

# Link the library with the source.
target_link_libraries(main MyLibrary)

写一个简单的脚本

cd build
rm -rf *    # 清除旧的文件。
cmake -DCMAKE_BUILD_TYPE=Debug ..
make

接下来配置settings.json,tasks.json,launch.json。第一个指明了clangd应该如何进行静态分析,告诉其编译命令的位置,用多少个线程进行分析,clang-tidy还可以进行简单的代码优化。
tasks.json将会在执行debug时执行我们的脚本,根据cmakefile建立构建规则,通过make来进行项目构建,并转移到launch.json脚本执行。
最后,launch.json将开始执行lldb的功能,并通过vscode的GUI显示出debug过程。

launch.json:

{
    // 使用 IntelliSense 了解相关属性。 
    // 悬停以查看现有属性的描述。
    // 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            "type": "lldb",
            "request": "launch",
            "name": "Debug",
            "program": "${workspaceFolder}/build/main",
            "args": [],
            "cwd": "${workspaceFolder}",
            "preLaunchTask": "cmake"
        }
    ]
}

settings.json:

{
    "clangd.arguments": [
        // 在后台自动分析文件(基于complie_commands)
        "--background-index",
        // 标记compile_commands.json文件的目录位置
        "--compile-commands-dir=${workspaceFolder}/build",
        // Log打开
        "-log=info",
        // 同时开启的任务数量
        "-j=4",
        // clang-tidy功能
        "--clang-tidy",
        // 全局补全(会自动补充头文件)
        "--all-scopes-completion",
        // 详细补全
        "--completion-style=detailed",
        // 补充头文件
        "--header-insertion=iwyu",
        // pch优化的位置
        "--pch-storage=disk",
  ],
    "clangd.path": "/opt/homebrew/Cellar/llvm/19.1.7/bin/clangd", 
    "[cpp]": {
        "editor.defaultFormatter": "llvm-vs-code-extensions.vscode-clangd"
    },
}

tasks.json

{
    // See https://go.microsoft.com/fwlink/?LinkId=733558
    // for the documentation about the tasks.json format
    "version": "2.0.0",
    "tasks": [
        {
            "label": "cmake",
            "type": "shell",
            "command": "zsh",
            "args": [
                "cmake.sh"
            ]
        }
    ]
}

现在我们还没有生成compile_commands.json,因此我们的headers.hpp会飘红。

img

执行debug或者执行我们的脚本后,重启界面,我们的headers.hpp就不会再飘红了。clang具有自行显示推导出来的auto的类型的功能,也可以展开我们的向量。我们可以来看一看:

img

标签:opt,llvm,CMAKE,VScode,clang,headers,json,LLVM,--
From: https://www.cnblogs.com/mumujun12345/p/18705585

相关文章