通过gen_compile_commands.py产生compile_commands.json文件的方法

        大家在使用vscode查看linux源代码时,会有很多飘红处,而且函数的跳转非常不方便。所以linux给了一个脚本gen_compile_commands.py,此脚本类似ctags这样,产生相应的关联之类的数据库,方便函数及文件的跳转等等。非常好。但是这个文档的说明不是太友好,加上网上一些资料也不是说得特别清楚,都是一句话,直接执行gen_compile_commands.py即可以产生compile_commands.json文件,但是你下载下来,解压源码发现是不行的,只会产生一个空的compile_commands.json文件。

我也是遇到这个坑。

后来查看了一些资料,包括gen_compile_commands.py源代码,他的文件头的注释如下:

#!/usr/bin/env python3
# SPDX-License-Identifier: GPL-2.0
#
# Copyright (C) Google LLC, 2018
#
# Author: Tom Roeder <tmroeder@google.com>
#
"""A tool for generating compile_commands.json in the Linux kernel."""

import argparse
没有什么参考价值,如果文件说明一下 xx.py -d kernel_build_path,那我觉得就有价值了。

发现py只是对.cmd文件的解析,部分代码如下:

def cmdfiles_in_dir(directory):
    """Generate the iterator of .cmd files found under the directory.

    Walk under the given directory, and yield every .cmd file found.

    Args:
        directory: The directory to search for .cmd files.

    Yields:
        The path to a .cmd file.
    """

    filename_matcher = re.compile(_FILENAME_PATTERN)

我在源代码下find . -name "*.cmd",发现一个都没有,就更奇怪了。后来突然想起,我make时指定了输出路径,make O=../build j24,即输出到上层的build目录下,我进入上层的build目录下,发现产生了非常多的.cmd文件。我是5.10.x的源代码,如下:

原因找到了,那就非常好解决了。

第一步:编译内核源代码,如果没有执行,不会产生.cmd文件,就不用谈第二步了,这也是为什么没编译的代码无法产生json文件的原因

第二步:执行gen_compile_commands.py -d build_output_path,然后将产生的json文件加入vscode的配置中,vscode加入后,解析大约需要几分钟,解析好,函数随意跳转,方便。

注意上面的-d build_output_path,这个如果没有写,默认就是“.",即当前目录,就像我上面所述一样,我kernel编译输出的路径是../build,我在执行gen_compile_commands.py没有指定.cmd的目录,所以输出的就是空的json文件。

我暂时是这么理解,如果大家遇到其他更好的方法,欢迎评论,指正。

希望上述解析对你有帮助。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

GPT-4o 引领人机交互新风向的向量数据库Milvus Cloud 成本

成本 AIGC 时代对于冷热储存的呼唤 成本一直是向量数据库获得更广泛使用的最大阻碍之一,这个成本来自两点: 储存,绝大多数向量数据库为了保证低延迟,需要把数据全量缓存到内存或者本地磁盘。在这个动辄百亿量级的AI 时代,意味着几十上百 TB 的资源消耗。 计算,数据需…

每日一练 2024.5.16 (补2024.5.13)

题目&#xff1a; 给你一个字符串数组 words 和一个字符串 s &#xff0c;请你判断 s 是不是 words 的 首字母缩略词 。 如果可以按顺序串联 words 中每个字符串的第一个字符形成字符串 s &#xff0c;则认为 s 是 words 的首字母缩略词。例如&#xff0c;"ab" 可以…

笔记-Windows NFS → 中文乱码导致文件找不到

前提准备 项目中有这么一块业务 1、 脚本同步 这一环&#xff0c;是运维同事通过脚本实现的&#xff0c;所以我没去关注 2、 读取文件并上传 这一环&#xff0c;是我实现的&#xff0c;稳定运行了很长一段时间了&#xff0c;一直没出问题 中文乱码** 直到有一天&#xff0…

算法工程师面试问题 | YOLOv8面试考点原理全解析(一)

本文给大家带来的百面算法工程师是深度学习目标检测YOLOv8面试总结&#xff0c;文章内总结了常见的提问问题&#xff0c;旨在为广大学子模拟出更贴合实际的面试问答场景。在这篇文章中&#xff0c;我们还将介绍一些常见的深度学习目标检测面试问题&#xff0c;并提供参考的回答…

Flink 高可用之StandAlone-HA模式(一)

Flink 高可用之StandAlone-HA模式 压缩包: tar -xvzf flink-1.9.1-bin-scala_2.11.tgz -C /opt && cd /opt/flink-1.9.1 集群规划: 1.集群规划 - 服务器: node1(Master Slave): JobManager TaskManager- 服务器: node2(Master Slave): JobManager TaskManager- …

国内常用的项目管理软件有哪些?六大企业级项目管理软件大盘点

一、 奥博思 PowerProject 项目管理软件 官方网址&#xff1a;http://www.powerproject.com.cn 北京奥博思软件技术有限公司自成立以来&#xff0c;一直专注于企业级项目管理软件的开发及解决方案&#xff0c;致力于为各类企业&#xff08;制造业、IT交付、金融、汽车及汽车零…

Pikachu 靶场敏感信息泄露通关解析

前言 Pikachu靶场是一种常见的网络安全训练平台&#xff0c;用于模拟真实世界中的网络攻击和防御场景。它提供了一系列的实验室环境&#xff0c;供安全专业人士、学生和爱好者练习和测试他们的技能。 Pikachu靶场的目的是帮助用户了解和掌握网络攻击的原理和技术&#xff0c;…

php解密工具

在线编辑器 复制如下代码到空白地区: <?php namespace FatSmallTools; class NavicatPassword {protected $version 0;protected $aesKey libcckeylibcckey;protected $aesIv libcciv libcciv ;protected $blowString 3DC5CA39;protected $blowKey null;protected $b…

小白也会SQL:大模型改变交互方式(上)

在人工智能与自然语言处理交汇点&#xff0c;有一种技术正悄然改变与数据交互的方式——将日常语言转化为精准SQL查询。这一“text-to-sql”转换任务&#xff0c;使非专业人士也能轻松驾驭复杂的数据库操作&#xff0c;极大地拓宽了数据应用的边界。 然而&#xff0c;现有前沿…

优思学院|一文看清APQP第三版的11个常见问题

大家好&#xff0c;APQP第三版于2024年3月1日正式发布今天优思学院[1]来聊聊APQP&#xff08;产品质量先期策划&#xff09;第三版的一些常见问题。这些问题涵盖了新版APQP和控制计划文档的多个方面&#xff0c;让我们一起来看看吧&#xff01; 1. 新版文档提供哪些语言版本&am…

el-upload上传多张图片

<el-form-item label="图片" :rules="createRules.strRequired" ><el-uploadclass="upload-demo"ref="upload"multiple:on-preview="handlePictureCardPreview":on-change="handlePicChange":before-upl…

【网站项目】SpringBoot379儿童疫苗接种管理系统

&#x1f64a;作者简介&#xff1a;拥有多年开发工作经验&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。&#x1f339;赠送计算机毕业设计600个选题excel文件&#xff0c;帮助大学选题。赠送开题报告模板&#xff…

MATLAB图形绘制

文章目录 图形绘制二维图形绘制plotfplot 坐标轴设置函数/同一窗口分区subplotaxis添加标注 单对数坐标图三维图形绘制mesh 图形绘制 图形绘制的基本步骤&#xff1a; 数据准备&#xff1a;主要工作是产生出自变量采样向量&#xff0c;计算相应的函数值向量选定图形窗口及子图…

域信息收集

文章目录 一、基础信息收集1、查看系统详细信息2、查看系统中是否存在杀软3、查看系统开启的服务3、其他命令 二、凭据信息收集2.1 wifi信息2.2 相关工具 三、横向信息收集 一、基础信息收集 收集版本、补丁、服务、任务、防护等。 1、查看系统详细信息 systeminfo # 查看系…

保温杯盖一般是什么材质的?

保温杯盖一般是什么材质的&#xff1f; Pi材料&#xff0c;也称为聚酰亚胺&#xff08;Polyimide&#xff09;&#xff0c;具有多种特殊性能和应用领域&#xff0c;主要作用如下&#xff1a; 1. 高温耐性&#xff1a;Pi材料具有出色的高温稳定性&#xff0c;能够在高温环境下长…

Django Celery 的配置及使用---最详细教程

Django Celery 的配置及使用 Redis提供队列消息功能 一、安装redis 系统版本&#xff1a;Ubuntu 20.041、获取最新软件包 sudo apt update sudo apt install redis-server2、安装完成后&#xff0c;Redis服务器会自动启动。查看redis是否启动成功 sudo systemctl status …

Ps 滤镜:干画笔

Ps菜单&#xff1a;滤镜/滤镜库/艺术效果/干画笔 Filter Gallery/Artistic/Dry Brush 干画笔 Dry Brush滤镜用于模拟使用干画笔技术&#xff08;介于油彩和水彩之间&#xff09;绘制的效果。此滤镜特别适用于为图像添加粗糙而富有表现力的笔触效果&#xff0c;同时减少细节&…

多态:解锁面向对象编程的无限可能

1. 概述 多态&#xff08;Polymorphism&#xff09;是面向对象编程的三大核心特性之一&#xff08;另两个是封装和继承&#xff09;。多态意味着不同的对象对同一消息做出不同的响应。简单来说&#xff0c;多态允许你使用父类引用指向子类对象&#xff0c;并且当调用方法时&am…

设计模式分享

2. 策略模式 2.1 定义&#xff1a;策略模式定义了家族算法&#xff0c;分别封装起来&#xff08;这些算法完成的都是相同的工作&#xff0c;只是实现不同&#xff09;&#xff0c;它可以用相同的方式调用所有的算法&#xff0c;减少了各种算法类与使用算法类之间的耦合。此模式…

huggingface笔记:使用accelerate加速

1 介绍 随着模型规模的增大&#xff0c;并行处理已成为在有限硬件上训练大型模型和提高训练速度的重要策略。Hugging Face 创建了Accelerate库&#xff0c;帮助用户在任何类型的分布式环境中轻松训练Transformers模型&#xff0c;无论是单机多GPU还是跨多机的多GPU 2 创建Acce…