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

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

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

  • 10
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值