Makefile:仅为一个目标设置变量

问题描述 投票:0回答:1

我有以下makefile:

.PHONY: backup other

REMOTE_HOST := server1
DOMAIN_NAME := vm1

VM_IS_RUNNING := $(shell ssh $(REMOTE_HOST) virsh domstate "$(DOMAIN_NAME)")

ifneq ($(.SHELLSTATUS),  0)
    $(error SSH command failed with status $(.SHELLSTATUS))
endif

################################################################################

backup:

ifeq ($(VM_IS_RUNNING),running)

    @echo "VM $(DOMAIN_NAME) is running."
    @exit 0

else

    @echo "VM $(DOMAIN_NAME) is NOT running."
    @exit 0

endif

################################################################################

other:

    @echo "hello"

首先,我设置一些稍后在目标

backup
中使用的变量,然后我有目标
backup
本身,最后我有另一个不相关的目标
other

如何在不设置第一个目标所需的连接变量的情况下运行目标

other

我尝试将它们移至备份部分,但没有成功

makefile gnu-make
1个回答
0
投票

如果您只想在

backup
命令中计算值,则应仅在
backup
命令中计算值。删除
VM_IS_RUNNING
进行变量赋值,并更改
backup
以将操作作为配方的一部分执行:

backup:
    running=$$(ssh $(REMOTE_HOST) virsh domstate "$(DOMAIN_NAME)"); \
    @if test "$$running" = running; then \
        echo "VM $(DOMAIN_NAME) is running."; \
    else \
        echo "VM $(DOMAIN_NAME) is NOT running."; \
    fi
© www.soinside.com 2019 - 2024. All rights reserved.