awk 在Makefile里面的问题

问题背景

为了方便的快速启动和结束程序,我用Makefile管理启动和停止(kill 掉进程),Makefile内容如下:

all:
	uwsgi --http-socket 0.0.0.0:5001 --process 4 --threads 4 --plugin python3 --wsgi-file manage.py --callable app --stats 0.0.0.0:9191 --stats-http
clean:
	ps ax | grep uwsgi | awk -F' ' '{print $1}' | xargs kill -9

在make clean的时候,发现$1会被当成Makefile的变量,因为没有定义,所以$1等价于空,于是,相当于执行的是:

ps ax | grep uwsgi | awk -F' ' '{print }' | xargs kill -9

因此,起不到kill的作用。

解决办法

在Makefile中使用$$代替$,修改后的Makefile

all:
	uwsgi --http-socket 0.0.0.0:5001 --process 4 --threads 4 --plugin python3 --wsgi-file manage.py --callable app --stats 0.0.0.0:9191 --stats-http
clean:
	ps ax | grep uwsgi | awk -F' ' '{print $$1}' | xargs kill -9