次の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)
文字列が生成され、コマンドは実際には実行されません。式をシェルに渡すには、次の値を2倍にする必要があります$
。
bash -c '[ "$$(lsmod|grep liason)" == "" ] || rmmod liason'
次のように単純化できます。
if lsmod | grep -q liason; then rmmod liason; fi
これにより、モジュールの削除中にエラーが発生した場合にビルドが停止します。