Makefile 仅适用于终端,使用 Emacs 时失败

Makefile only works on terminal, fails when using Emacs

我目前正在尝试在 linux 上编写基本内核模块。我可以在终端上编译源代码而没有任何错误

~/Desktop/kernelDriver$ make
make -C /lib/modules/5.8.0-7642-generic/build M=/home/cryonayes/Desktop/kernelDriver modules
make[1]: Entering directory '/usr/src/linux-headers-5.8.0-7642-generic'
CC [M]  /home/cryonayes/Desktop/kernelDriver/basicModule.o
MODPOST /home/cryonayes/Desktop/kernelDriver/Module.symvers
CC [M]  /home/cryonayes/Desktop/kernelDriver/basicModule.mod.o
LD [M]  /home/cryonayes/Desktop/kernelDriver/basicModule.ko
make[1]: Leaving directory '/usr/src/linux-headers-5.8.0-7642-generic'

但是当我尝试在 Emacs 上使用相同的文件进行编译时出现此错误

-*- mode: compilation; default-directory: "~/Desktop/kernelDriver/" -*-
Compilation started at Wed Mar  3 20:42:07
   
make
make -C /lib/modules/5.8.0-7642-generic/build M=/home/cryonayes/Desktop/kernelDriver modules
make[1]: *** /lib/modules/5.8.0-7642-generic/build: No such file or directory.  Stop.
make: *** [Makefile:7: all] Error 2    
Compilation exited abnormally with code 2 at Wed Mar  3 20:42:07

它说没有这样的文件或目录。但它确实存在。

这是我的 Makefile 的内容

obj-m += basicModule.o
    
KERNEL_DIR ?= /lib/modules/$(shell uname -r)/build
PWD := $(shell pwd)
    
all:
    $(MAKE) -C $(KERNEL_DIR) M=$(PWD) modules
    
clean:
    $(MAKE) -C $(KERNEL_DIR) M=$(PWD) clean

导致此错误的原因是什么?

据我了解,/lib/modules/5.8.0-7642-generic/build/usr/src/linux-headers-5.8.0-7642-generic 的符号链接。

  1. 您可以改用 /usr/src/linux-headers-$(shell uname -r) 并重试。
  2. 添加 test 规则以显示有关 -C 状态的信息,如下所示;
test:
    stat $(KERNEL_DIR)

这应该显示它指向的内容和位置。

如果您在 GUI 会话中,当终端 运行 没有它时,某些东西可能已将您的 emacs 沙箱化。您可能有某种“假根”来将其与漏洞隔离开来。