通过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文件。

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

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

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

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

相关文章

软件测试委托合同(Word原件实际参考)

一、 任务表述 二、双方的主要义务 三、履约地点 四、合同价款 五、测试费用支付方式 六、履行的期限 七、资料的保密 八、 风险责任的承担 九、验收方法 十、 争议解决 十一、 其他 十二、签章 十三、计算机软件产品鉴定测试保密协议 软件资料清单列表部分文档&#xff1a; …

Object.wait()和LockSupport.park()

Object.wait() 和 LockSupport.park() 都是用来使当前线程等待的方法&#xff0c;但它们在使用场景和机制上有所不同&#xff1a; Object.wait() 用途&#xff1a;wait() 方法属于对象监视器&#xff08;Monitor&#xff09;的一部分&#xff0c;通常与 synchronized 块或方法…

电感式传感器

电感传感器是基于电磁感应原理&#xff0c;将被测非电量&#xff08;如位移、压力、振动等&#xff09;转换为电感量变化的一种结构性传感器。利用自感原理的有自感式传感器&#xff08;可变磁阻式&#xff09;&#xff0c;利用互感原理的有互感式&#xff08;差动变压器式和涡…

AI学习指南线性代数篇-矩阵的运算

AI学习指南线性代数篇-矩阵的运算 线性代数中&#xff0c;矩阵的运算是一项重要而基础的内容。在人工智能领域&#xff0c;矩阵的运算被广泛应用于各种算法中&#xff0c;如神经网络、图像处理、自然语言处理等。本文将从矩阵的运算概述、在AI中的使用场景、定义和意义以及公式…

QT:QML制作线形图

目录 一.介绍 二.引入库 三.自定义属性 四.悬停处理函数 五.设置X轴 六.设置Y轴 七.画线 八.测试点坐标 九.设置值 十.效果演示 十一.代码演示 1.LineGraph.qml 2.main.qml 一.介绍 线形图&#xff08;也称为折线图&#xff09;是一种常用的数据可视化工具&#…

如何找到MySQL中存储引擎所对应的表空间并且打开?

在上节课我们学习了数据库&#xff08;MySQL&#xff09;进阶&#xff1a;存储引擎&#xff0c;有不少同学产生疑惑&#xff0c;到底要怎么找到表空间并且打开啊&#xff1f;这节课我们就来探讨。 首先&#xff0c;根据这个路径&#xff1a;C:\ProgramData\MySQL\MySQL Server…

mybatis-plus如何使用QueryWrapper和LambdaQueryWrapper的and方法?

构造器去构造条件的时候&#xff0c;我们都知道eq方法去链式的时候是自动添加and的&#xff0c;那如果需要and的那个条件需要加括号呢&#xff1f; 环境 Jdk 1.8、mybatis-plus 3.5.3.2、mysql 5.7.11 示例 sql&#xff1a; select * from user where openid 1 and (phon…

谷歌Flank潜藏3年的Github Action供应链攻击

01 简 介 Flank [1] 是谷歌 Firebase Test lab 开源在 Github 的一个项目&#xff0c;用于同时对多个安卓和IOS设备进行测试。2024年4月15号 AWS 安全工程师 Adnan Khan 公布了关于该项目代码仓库 Github Action CI/CD 存在漏洞的细节[2]&#xff0c;漏洞在2020年于此 代码合…

通信网络时钟同步(PTP网络授时服务器)技术探讨

通信网络时钟同步&#xff08;NTP网络授时服务器&#xff09;技术探讨 通信网络时钟同步&#xff08;NTP网络授时服务器&#xff09;技术探讨 1、着移动通信业务的发展和移动用户的快速增长&#xff0c; 移动网络架构向IP化、宽带化进展。为了适应业务IP化发展趋势&#xff0c…

02 VUE学习:模板语法

模板语法 Vue 使用一种基于 HTML 的模板语法&#xff0c;使我们能够声明式地将其组件实例的数据绑定到呈现的 DOM 上。所有的 Vue 模板都是语法层面合法的 HTML&#xff0c;可以被符合规范的浏览器和 HTML 解析器解析。 在底层机制中&#xff0c;Vue 会将模板编译成高度优化的…

开发vue3,真的可以不用ref/reactive了,也不需要ref.value

什么是Cabloy-Front&#xff1f; Cabloy-Front 是一款支持 IOC 容器的 Vue3 框架。不用ref/reactive&#xff0c;不用ref.value&#xff0c;不用pinia 与UI库的配合 Cabloy-Front 可以搭配任何 UI 库使用&#xff0c;并且内置了几款 UI 库的项目模版&#xff0c;便于开箱即用…

免费SSL证书签发安装指南

一、签发 1.选择证书颁发机构&#xff08;CA&#xff09;&#xff1a;首先&#xff0c;你需要找到一个提供免费SSL证书的CA。有些CA会提供永久免费的SSL证书&#xff0c;而有些则可能只提供有限时间的试用证书&#xff0c;如JoySSL就提供永久免费证书。 2.生成CSR&#xff08…

WPF 鼠标拖拽平移

效果 xaml <ScrollViewer x:Name"scrollViewer" HorizontalScrollBarVisibility"Hidden" VerticalScrollBarVisibility"Disabled" Background"#FFF1ADAD"PreviewMouseDown"ScrollViewer_OnPreviewMouseDown"PreviewMou…

Electron学习笔记(一)

文章目录 相关笔记笔记说明 一、轻松入门 1、搭建开发环境2、创建窗口界面3、调试主进程 二、主进程和渲染进程1、进程互访2、渲染进程访问主进程类型3、渲染进程访问主进程自定义内容4、渲染进程向主进程发送消息5、主进程向渲染进程发送消息6、多个窗口的渲染进程接收主进程发…

白鲸开源CEO郭炜在2024 DataOps发展大会上获聘专家

2024年5月15日&#xff0c;白鲸开源CEO郭炜在2024 DataOps发展大会上被正式聘任为DataOps专家&#xff0c;并获得了荣誉证书。本次大会由中国通信标准化协会主办&#xff0c;中关村科学城管委会提供支持&#xff0c;大数据技术标准推进委员会&#xff08;CCSATC601&#xff09;…

iisnginx环境一次奇怪的跨域问题解决经过

跨域问题描述&#xff1a; iis网站跨域、nginx 网站跨域 都已配置&#xff0c;访问接口依然出现跨域问题。 错误提示&#xff1a; ccess to XMLHttpRequest at ‘https://xxx.com/gameapi/preserve/get/status’ from origin ‘https://cdn.xxx.com’ has been blocked by CO…

Python简易信息管理系统

我们将通过一个实例来探讨如何使用Python与MySQL数据库进行交互&#xff0c;以构建一个简单的学生信息管理系统。这个系统将能够执行基本的CRUD&#xff08;创建(Create)、读取(Retrieve)、更新(Update)、删除(Delete)&#xff09;操作&#xff0c;以管理学生信息。我们将使用m…

Python爬虫-批量爬取新能源汽车上牌量

前言 本文是该专栏的第27篇,后面会持续分享python爬虫干货知识,记得关注。 最近粉丝朋友咨询新能源汽车上牌量数据的爬取方法,对此在本文中,笔者以某汽车平台为例,通过python来实现对“新能源汽车上牌量”的数据进行抓取。 具体实现思路和详细逻辑,笔者将在正文结合完整…

三丰云搭建QQ-bot的服务器-代码实现(3)

网址&#xff1a;https://www.sanfengyun.com >> 三丰云免费云服务器 代码实现 书接上回装饰器&#xff0c;显而易见&#xff0c;只有装饰器还不完善&#xff0c;所以我们接着来补充代码 首先定义一个 MyClient 类 class MyClient(botpy.Client):async def on_ready(…

Nacos :安装配置、服务注册

目录 一、中文官网 二、配置 1、application.properties 2、启动 Nacos 服务 3、访问 Nacos 三、服务注册 1、配置Nacos客户端的pom依赖 2、添加服务配置信息 3、添加 Nacos 启动注解 一、中文官网 Nacos官网 | Nacos 官方社区 | Nacos 下载 | Nacos 下载后直接解压…