带有源命令的 Makefile 不起作用

带有源命令的 Makefile 不起作用

我有以下 Makefile

env:
    source venv/bin/activate

当我make env激活 python 虚拟环境时,出现以下错误

源 venv/bin/activate make:源:没有这样的文件或目录 make:*** [env] 错误 1

但是当我复制source venv/bin/activate并在 shell 中运行时,它运行正常。我需要在 Makefile 中设置当前目录吗?

答案1

sourceshell 内置命令,而不是可以从 shell 以外的任何地方启动的可执行文件。它的作用source是读取并执行文件的内容在当前 shell 中,无需启动新 shell

这样做的目的是修改当前 shell 的状态(如果你只是sh venv/bin/activate,你的 shell 也会执行activate脚本的内容,但随后完成并退出)。

但你想做的是make修改程序的状态activate。无论以何种方式从 生成 shell 中运行脚本make,都不会改变make看到的环境。
这是因为由另一个程序 (B) 启动的每个程序 (A) 都会获得启动程序 (B) 的环境的副本,它 (A) 可以根据自己的意愿更改该副本,而不会影响启动程序 (B) 的环境。

因此,你想做的事即使从理论上来说也是行不通的。

如果您需要在 venv 中运行某些 Makefile,则必须activate先获取脚本,然后从修改后的 shell 启动make;而不是相反。

相关内容