Gnu make GNU使两个变量有条件

Gnu make GNU使两个变量有条件,gnu-make,Gnu Make,我有两个看起来相同的变量,但是,我的gnu make比较并没有像预期的那样工作 下面是一个简单的实验: 生成文件 test: $(eval $@_VER := $(shell aws elasticbeanstalk describe-application-versions \ --application-name $(APP_NAME) \ --version-label $(NEW_VERSION) \ --query "ApplicationVersion

我有两个看起来相同的变量,但是,我的gnu make比较并没有像预期的那样工作

下面是一个简单的实验:

生成文件

test:
    $(eval $@_VER := $(shell aws elasticbeanstalk describe-application-versions \
    --application-name $(APP_NAME) \
    --version-label $(NEW_VERSION) \
    --query "ApplicationVersions[*].VersionLabel" \
    --output=text))

    @echo $($@_VER)
    @echo $(NEW_VERSION)

ifeq ($(NEW_VERSION), $($@_VER))
    $(warning Version $($@_VER) already exists, skipping creating a new version.)
endif
以及输出:

$ make test
7aeaec70b9a2820fde0f3b88ea40c4557b1ad42a
7aeaec70b9a2820fde0f3b88ea40c4557b1ad42a
您可以看到两个变量看起来相同,但我希望在输出中显示警告消息。我还尝试过删除whit空格,例如
$(strip$($@\u VER))


问:我需要做什么才能使有条件工作?

ifeq不是定义了
$@
的配方的一部分,而是一个新的顶级产品。因此,
$@
不再解析为目标名称

无论如何,您似乎想要的是一个简单的shell比较

:
@echo $($@_VER)
@echo $(NEW_VERSION)
if [ "$(NEW_VERSION)" = "$($@_VER)" ]; then \
    echo "Version $($@_VER) already exists, skipping" >&2; \
    false; fi