我有以下 GNU make Makefile
PWD := $(shell pwd)
obj-m += liason.o
default:
bash -c '[ "$(lsmod|grep liason)" == "" ] || rmmod liason'
make -C /src M=$(PWD) modules
我调用 makefile;它在输出中显示了这一点:
bash -c '[ "" == "" ] || rmmod liason'
因此,rmmod
没有被执行。
然而:
模块“联络”是安装。
当我从 cmdline 执行以下命令时它甚至会出现。
$ lsmod|grep liason
liason 16384 0
lsmod|grep
因此,在 makefile 输出中相同的空引号是没有意义的。
答案1
正在$
由 Make 处理;$(lsmod|grep liason)
生成一个空字符串,命令实际上并未执行。要将表达式传递到 shell,您需要将以下内容加倍$
:
bash -c '[ "$$(lsmod|grep liason)" == "" ] || rmmod liason'
您可以将其简化如下:
if lsmod | grep -q liason; then rmmod liason; fi
这确保删除模块时出现任何错误都会停止构建。