问题描述:
在使用CLion开发Linux驱动时,需要引入各种头文件,比如<linux/module>、<linux/init>等,但是毫无例外,都会在报错提示文件或文件路径不存在。这在很大程度上限制了CLion的发挥,因为无法使用相关代码补全、静态检查等功能了,全被这个缺失的头文件挤占了。
这个问题不是靠安装kernel-headers什么的解决的,因为这个linux驱动开发需要引入的是linux内核工程,而需要的<linux/module>、<linux/init>等头文件实际在linux内核工程下的include、arch/arm/include等
解决办法:
解决办法非常简单,一般来说我们创建一个模块驱动工程时,需要先创建一个文件夹,然后再用CLion打开这个文件夹而不是从CLion中创建项目(因为CLion创建项目时默认的是cmake)
所以此时如果文件夹里没有Makefile,CLion无法加载,如果有Makefile,但Makefile里面往往不会有目标all,比如下面这个led驱动的Makefile
这种Makefile可以在终端里执行,但是CLion无法解析,也就无法把linux内核下的include、arch/arm/include等加载到外部库中,那么CLion自然无法识别<linux/module.h>等头文件
所以得让CLion能解析这个Makefile,而CLion无法解析Makefile的原因是因为它找不到默认的构建目标all。
那么方法一就是直接到设置里面改了这个构建目标,但这个影响比较大
另一个方法就是给Makefile里面添加一个all,这样不会影响到原Makefile的功能
这样做了之后就会自动把头文件给你填上,下面两个include路径是CLion解析Makefile(构建)后产生的可以看到路径确是我们需要指定的
此时驱动里面也可以正常加载头文件里,那么代码补全、静态检查等功能就可以正常使用了
也可以直接使用构建了