다음 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)
빈 문자열이 생성되고 명령이 실제로 실행되지 않습니다. 표현식을 셸에 전달하려면 다음을 두 배로 늘려야 합니다 $
.
bash -c '[ "$$(lsmod|grep liason)" == "" ] || rmmod liason'
다음과 같이 단순화할 수 있습니다.
if lsmod | grep -q liason; then rmmod liason; fi
이렇게 하면 모듈을 제거하는 동안 오류가 발생하면 빌드가 중지됩니다.