Makefile 中的一行条件检查

Makefile 中的一行条件检查

我试图实现这样的目标:如果用户将运行make build_x version=1.0则显示Building version 1.0,否则(make build_x不带version参数)显示Building version latest。但这里的关键是什么 - 我需要将版本设置-为默认值(以便能够正确使用它git)。这就是为什么我使用附加变量version_info替换为-的原因latest

所以我的代码如下所示:

build_x:
    $(eval version ?= -)        
    $(eval version_info = ${if ["${version}" == "-"], "latest", "${version}"})

    ${INFO} "Doing checkout according to version $(version_info)..."

我知道问题可能出在给 的这个条件上if

有任何想法吗?

答案1

这对我有用:

version ?= -
ifeq (-,$(version))
  version_info = latest
else
  version_info = $(version)
endif

build_x:
    @echo version_info = $(version_info)

如果未设置,则设置version-,然后适当填充version_info

使用特定于目标的变量和单行变体:

build_x: version ?= -
build_x: version_info = $(if $(version:-=),$(version),latest)
build_x:
    @echo version_info = $(version_info)

其工作原理如下(参见总体GNU Make 文档):

  • version ?= - version如果-尚未设置
  • if 检查它的第一个参数,评估它是否为空,如果第一个参数非空,则替换为第二个参数,如果为空,则替换为第三个参数
  • $(version:-=)评估version,替换-与空字符串(:引入替换,搜索键是之前的文本=,替换是之后的文本=

答案2

您可以在这里充分利用特定于目标的变量值功能:

build_x: version := latest
build_x:
     @echo "Building version $(version)"

相关内容