我正在尝试使用Makefile命令激活我的虚拟环境,但是当我在下面运行时遇到错误。
Command
make env
错误
Makefile:20: warning: overriding commands for target `make'
Makefile:17: warning: ignoring old commands for target `make'
source ../env/bin/activate
make: source: No such file or directory
make: *** [env] Error 1
Makefile
...
env:
source ../env/bin/activate
source ../env/bin/activate
在命令行上有效。我想知道关于Makefile的一些特殊信息,我不明白这会导致失败吗?
这具有更多的层次,您可能会发现下一步,但是一次。食谱是在shell中执行的,更具体地说,默认情况下,我还是以/bin/sh
为例,它不理解source
,因此...将Makefile
更改为:
env:
. ../env/bin/activate
或定义make SHELL
变量来表示/bin/bash
,它将似乎起作用:
SHELL := /bin/bash
env:
source ../env/bin/activate
但是,下一件事...食谱的一行执行fork()
自己的外壳程序(环境),因此您对一个外壳程序实例(通过提供脚本)所做的更改不会影响下一个外壳程序实例。您可以解决这个问题,并通过将多个配方命令连接为实际一行来生成一个外壳(转义换行符,并使用;
分隔命令:
env:
. ../env/bin/activate ; \
SOME_COMMAND
但是这仅对作为该命令行一部分的命令有效。
您可能会考虑在多个配方中进行相同的操作,但是实际上,如果需要使环境对make中发生的任何事情都有效,那么您可能只想在调用make之前先激活它。