【问题标题】:make[1]: *** /lib/modules//build/: No such file or directory. Stopmake[1]: *** /lib/modules//build/: 没有这样的文件或目录。停止
【发布时间】:2020-12-02 21:41:54
【问题描述】:

我正在使用 Makefile

ARCH linux distro 编译内核模块 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

【问题讨论】:

    标签: makefile module linux-kernel kernel-module archlinux


    【解决方案1】:

    make 在将配方传递给 shell 之前对其进行扩展。在您的情况下,make 用名为PWD 的make 变量的值替换了$(PWD)(正确),但它也用名为uname -r 的make 变量的值替换了$(uname -r)。由于没有定义这样的 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
    

    【讨论】:

    • 或者可以使用`uname -r` 变体。
    猜你喜欢
    • 2013-04-05
    • 2020-02-07
    • 1970-01-01
    • 2017-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-15
    • 2017-07-02
    相关资源
    最近更新 更多