Makefile 中的 & 分隔命令
Ampersand separated commands in a Makefile
我的 Makefile 中有以下规则。
init-local-env:
@echo 'initializing python3 local environment in .venv'
python3 -m venv .venv && source .venv/bin/activate
但不带我到我的虚拟环境。看来,只有命令的第一部分是 Makefile 运行,因为它已经创建了 .venv
文件夹,并且只有在我 运行 source .venv/bin/activate
在终端上,它带我去环保。
但是,如果我在终端上 运行 这两个命令,它 运行 没有问题,它也会带我到环境中。
python3 -m venv .venv && source .venv/bin/activate
我试图通过引用 来使用 if
子句。
init-local-env:
@echo 'initializing python3 local environment in .venv'
if [ -z "$$(python3 -m venv .venv)" ]; then \
source .venv/bin/activate; \
fi
不过好像也没用。它给了我下面的输出并创建了 .venv
文件夹,但不执行第二个命令。
bash$ make init-local-env
initializing python3 local environment in .venv
if [ -z "$(python3 -m venv .venv)" ]; then \
source .venv/bin/activate; \
fi
知道吗,我做错了什么?
我如何 运行 这两个命令一个接一个地执行(使用 && )?
makefile 规则的每一行都由单独的 shell 执行。因此,在 source .venv/bin/activate
执行后,它会终止 shell 并在下一行开始一个新的,而不会影响 source .venv/bin/activate
.
您可以让 GNU make 一次执行所有行 shell,请参阅 Using One Shell。
我的 Makefile 中有以下规则。
init-local-env:
@echo 'initializing python3 local environment in .venv'
python3 -m venv .venv && source .venv/bin/activate
但不带我到我的虚拟环境。看来,只有命令的第一部分是 Makefile 运行,因为它已经创建了 .venv
文件夹,并且只有在我 运行 source .venv/bin/activate
在终端上,它带我去环保。
但是,如果我在终端上 运行 这两个命令,它 运行 没有问题,它也会带我到环境中。
python3 -m venv .venv && source .venv/bin/activate
我试图通过引用 if
子句。
init-local-env:
@echo 'initializing python3 local environment in .venv'
if [ -z "$$(python3 -m venv .venv)" ]; then \
source .venv/bin/activate; \
fi
不过好像也没用。它给了我下面的输出并创建了 .venv
文件夹,但不执行第二个命令。
bash$ make init-local-env
initializing python3 local environment in .venv
if [ -z "$(python3 -m venv .venv)" ]; then \
source .venv/bin/activate; \
fi
知道吗,我做错了什么? 我如何 运行 这两个命令一个接一个地执行(使用 && )?
makefile 规则的每一行都由单独的 shell 执行。因此,在 source .venv/bin/activate
执行后,它会终止 shell 并在下一行开始一个新的,而不会影响 source .venv/bin/activate
.
您可以让 GNU make 一次执行所有行 shell,请参阅 Using One Shell。