Makefile中source命令执行失败的问题求助
Makefile中source命令执行失败的问题求助
嗨,我来帮你捋清楚这个问题~
你遇到的问题核心原因是:Make默认使用的是/bin/sh这个POSIX标准shell,而source是Bash的内置命令。很多系统里的sh并不是Bash(比如Debian/Ubuntu系默认用dash),所以在Make的子shell里找不到source命令,就会报错;而你直接在终端执行时,用的是你自己默认的shell(通常是Bash),所以能正常运行。
给你几个可行的解决方案:
方案1:改用POSIX兼容的.命令
source的POSIX等价写法是.,这个命令在所有符合标准的shell里都能生效,修改你的Makefile如下(注意命令行前必须是Tab键,不能用空格,Makefile对缩进要求非常严格):
env: . venv/bin/activate
方案2:指定Make使用Bash执行命令
在Makefile的最开头加上一行,强制让Make用Bash来运行命令,这样就能直接用source了:
SHELL := /bin/bash env: source venv/bin/activate
额外提醒:激活虚拟环境的小坑
不过要注意,即使上面的修改能让命令不报错,make env执行完之后,你的当前终端并不会处于虚拟环境中。因为Make的每个命令都是在独立的子shell里运行的,子shell结束后,环境变量不会传递回父shell(也就是你的终端)。
如果想方便激活虚拟环境,更实用的方式是让Make输出提示,比如:
env: @echo "请在终端执行以下命令激活虚拟环境:" @echo "source venv/bin/activate"
这样用户看到提示后直接复制执行就好啦~
备注:内容来源于stack exchange,提问作者user1187968
相关产品推荐
相关产品推荐

