我正在使用 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/