makefile - 使 [1] : ***/lib/modules//build/: No such file or directory. 停止

标签 makefile module linux-kernel kernel-module archlinux

我正在使用 Makefile

ARCH linux 发行版 上编译内核模块 thermal.c

生成文件:

obj-m += thermal.o

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

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

make 命令的输出是:

make -C /lib/modules//build/ M=/home/user/dir modules
make[1]: *** /lib/modules//build/: No such file or directory.  Stop.
make: *** [Makefile:4: all] Error 2

uname -r 输出:5.6.8-arch1-1

最佳答案

make 在将配方传递给 shell 之前对其进行扩展。在您的情况下,将 $(PWD) 替换为名为 PWD 的 make 变量的值(正确),但它也替换了 $(uname -r) 通过名为 uname -r 的 make 变量的值。由于没有定义这样的 make 变量,结果是空字符串。使用 $$(uname -r) 解决了这个问题,因为 make 将它扩展为 $(uname -r),正是您想要传递给 shell 的内容。

总而言之,您必须将要保留的 $ 加倍以从 make 扩展中转义:

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

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

关于makefile - 使 [1] : ***/lib/modules//build/: No such file or directory. 停止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63388413/

相关文章:

c++ - 在 makefile 的子目录中链接对象构建

ios - 使用theos开发iOS越狱应用

excel - 如何在 Excel VBA 中声明全局变量以在整个工作簿中可见

python - imp.load_source : 'module' has no attribute 'foo' 出现问题

python - 在运行时检查 Python 模块版本

android - 如何在 Linux/Android 2.6.29 中查找系统调用实现?

c - 如何告诉 GNU MAKE 将 .po 文件视为 .h 文件?

c - 如果我们在 SMP 上的中断处理程序中休眠会发生什么

linux - 如何给 Ramdisk 添加 root 密码

c - Makefile:多个目标,一个依赖