LLVM+CMAKE+VScode

news/2025/2/8 23:19:39/文章来源:https://www.cnblogs.com/mumujun12345/p/18705585

在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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/881025.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

FastAPI for Machine Learning: Live coding an ML web application

FastAPI for Machine Learning: Live coding an ML web application https://www.bilibili.com/video/BV1kC411b7Se/?spm_id_from=333.788.videopod.sections&vd_source=57e261300f39bf692de396b55bf8c41b翻译:FastAPI用于机器学习:现场编码一个ML Web应用程序。欢迎!加…

08_LaTeX之自定义LaTeX命令和功能

本章的内容将让你能编写可重复利用的模块——宏包和文档类,并在其中自己定义命令和环境。08_\(\LaTeX{}\) 之自定义\(\LaTeX{}\)命令和功能 目录08_\(\LaTeX{}\) 之自定义\(\LaTeX{}\)命令和功能自定义命令和环境定义新命令定义环境xparse 宏包简介编写自己的宏包和文档类编写…

2024FJ省队集训 - 笔记 游记

Day 0 火车上写了两道可爱小清新数学题。题没写多少bug还一堆。 我们住的是福建省团校,据说是福州有演唱会导致各种酒店房间紧张。 和 wzh,zzp 口胡了一些题目就去睡觉了。 团校的住宿条件确实不错,睡得挺香。 Day 1 T1 提交答案题就是依托美味的构式,你T2T3费劲心思骗个五分…

Stern-Brocot 树

Stern-Brocot 树由两个初始值 \(0\over 1\) 和 \(1\over0\),由两个相邻的数 \(a\over b\) 和 \(c\over d\) 会生成数 \(a + c\over b + d\)。这由图片可以非常直观地看出。形态类似于一棵树。 每个点上有一个"三元组"\((a,b,c)\),\(\left(\dfrac{0}{1},\dfrac{1}{1…

电影解析之虾米解析

我们通常会因为看电影但是需要vip却没有足够生活费去支持的困扰 我就在想有没有白嫖的方法呢(bushi 就在我苦恼的时候我发现了一个方法————就是被称为:解析 的技术这玩意就是最好的选择 但是可能部分人在刚刚接触的时候不会用的于是我就写了一个小软件来支持(只支持wind…

【AI+安全】基于大模型在流量分析领域应用的实践

一、内容概要 随着网络攻击手段的不断进化,流量分析已经成为确保网络安全的关键环节。传统的基于规则和机器学习的方法在一定程度上帮助我们识别和防范攻击,但随着网络攻击形式的多样化和复杂性增加,如何利用更强大的技术手段来分析网络流量,成为了当今网络安全领域的研究热…

RocketMQ实战—7.生产集群部署和生产参数

大纲 1.RocketMQ生产集群部署和生产参数分析 2.RocketMQ生产集群10wTPS压测 3.RocketMQ生产级故障案例1.RocketMQ生产集群部署和生产参数分析 (1)服务器数量 4C8G阿⾥云⾼配服务器共四台,公⽹IP假设如下: 139.224.217.92,106.15.250.248,47.102.152.14,139.224.212.58 (2)…

十二、MyBatis分页插件

十二、MyBatis分页插件@目录十二、分页插件12.1 分页插件使用步骤12.2 分页插件的使用12.3 测试案例本人其他相关文章链接 十二、分页插件 12.1 分页插件使用步骤 1. 添加依赖 <dependency><groupId>com.github.pagehelper</groupId><artifactId>page…

htb Nunchucks walkthrough ssti + shebang绕过apparmor限制

注册发现注册失败扫描子域名 ffuf -u https://nunchucks.htb/ -w /usr/share/dirb/wordlists/common.txt -H "Host: FUZZ.nunchucks.htb" -fs 30589访问看看有啥随便输入个邮箱抓包看看 尝试ssti 注入发现确实存在在hacktrick上搜索payload https://book.hacktricks.…

P1551 亲戚

并查集还是不熟,还得练 #include<iostream> #include<set> #include<map> #include<algorithm> #include<vector> #define int long long const int N = 1e6; using namespace std; char* p1, * p2, buf[100000]; #define nc() (p1==p2 &&a…

推荐一些程序员常逛的开发者社区

前言 在信息技术日新月异的今天,程序员作为推动技术进步的重要力量,始终在探索、学习和交流的道路上不断前行。为了帮助程序员们更好地拓宽视野、提升技能,本文大姚将给大家推荐12个程序员常逛的开发者社区。 GitHub GitHub是一个功能强大、易于使用的代码托管平台。拥有庞大…

为飞牛OS基于FRP的内网穿透开启HTTPS加密

前言 玩NAS的朋友应该有比较多只是在家庭局域网使用,比如日常看看电影、备份手机照片什么的,这属于家庭局域网的使用场景。 当然了,如果你经常出差,或者过年回家不想把NAS也背回去,或者是想上班摸鱼,或者是NAS搭建游戏服务器之类的能公网访问就很有必要了。 公网访问我自…