Linux内核为模块生成compile-commands.json

问题描述 投票:0回答:1

问题:大多数宏定义甚至头文件都不会被IDE查找,因为IDE配置中没有指定包含路径。它会抑制自动完成和导航。

这是我的

Makefile

#-Wno-declaration-after-statement
ccflags-y := -std=gnu11 -Wno-declaration-after-statement -Werror
obj-m += pfsw.o
pfsw-objs := src/init.o

all:
    make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules

clean:
    make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean

我运行

make V=1
并注意到编译命令和包含路径实际上相当麻烦(计算 Linux 特定的
-include
参数):

gcc -Wp,-MD,/home/memyself/lkm/procfs_write/src/.init.o.d -nostdinc \
   -isystem /usr/lib/gcc/x86_64-linux-gnu/7/include \
   -I./arch/x86/include -I./arch/x86/include/generated \
   -I./include -I./arch/x86/include/uapi \
   -I./arch/x86/include/generated/uapi -I./include/uapi \
   -I./include/generated/uapi \
   -include ./include/linux/kconfig.h -Iubuntu/include \
   -include ./include/linux/compiler_types.h \
   -D__KERNEL__ \
   ...tons of options ommitted...
   -c -o /home/memyself/lkm/procfs_write/src/init.o \
   /home/memyself/lkm/procfs_write/src/init.c

问题: 有没有办法生成

compile-command.json
来通知 IDE 有关包含路径的信息?或者唯一的解决方案是手动将包含路径一一传递到IDE?

c linux makefile linux-kernel linux-device-driver
1个回答
11
投票

由于CLang有很多不同的工具,包括一些分析代码的工具,因此需要compile-command.json。这就是为什么 Google 的 Tom Roeder 提供了 为此,请在提交中scripts/clang-tools/gen_compile_commands.pyb30204640192(“脚本:添加一个工具来生成compile_commands.json文件”)。

注意,内核必须至少编译一次才能使该脚本工作。

附注我想您正在尝试 MS Visual Studio Code?

感谢我的同事 Alex,他是该脚本的用户,并告诉我此类脚本的存在。

© www.soinside.com 2019 - 2024. All rights reserved.