我有两个看起来相同的变量,但是,我的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)))
问:我需要做什么才能进行有条件的工作?
答案 0 :(得分:0)
ifeq
不是定义$@
的配方的一部分,而是新的顶级制作。因此$@
不再解析为目标名称。
无论如何,你似乎想要的是一个简单的shell比较。
:
@echo $($@_VER)
@echo $(NEW_VERSION)
if [ "$(NEW_VERSION)" = "$($@_VER)" ]; then \
echo "Version $($@_VER) already exists, skipping" >&2; \
false; fi