LLVM+CMAKE+VScode
在mac上使用vscode+CMAKE+LLVM 配置C++环境
仅供参考,请多谅解
原先的vscode官方推荐插件intellisense实在是太慢,以至于在很多大型项目(ns3,OS)等进行静态检查的速度奇慢无比,并且大量消耗资源。于是尝试在mac上使用llvm+clangd进行配置。由于采用的是homebrew安装clang19,因此在arm64的linux上的配置还没有探索出来QAQ
目前环境:
安装llvm@19
首先安装好我们的llvm:brew install llvm
笔者安装了llvm@19。请自行找好二进制文件的路径,这对我们很重要!
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有冲突)。
安装下面LLVM提供的一些集成插件:
创建文件夹进行配置
我们的文件夹(工作区)结构如下:
. ├── 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会飘红。
执行debug或者执行我们的脚本后,重启界面,我们的headers.hpp就不会再飘红了。clang具有自行显示推导出来的auto的类型的功能,也可以展开我们的向量。我们可以来看一看:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了