GNU以两个vars为条件

时间:2016-03-15 06:24:17

标签: gnu-make

我有两个看起来相同的变量,但是,我的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

你可以看到两个vars看起来都一样,但我希望输出中有警告信息。我还尝试删除了$(strip $($@_VER)))

等空格

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

1 个答案:

答案 0 :(得分:0)

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

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

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