Makefile 中的一行条件检查

mar*_*rix 6 make

我试图实现这样的目标:如果用户将运行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)..."
Run Code Online (Sandbox Code Playgroud)

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

有任何想法吗?

Ste*_*itt 6

这对我有用:

\n\n
version ?= -\nifeq (-,$(version))\n  version_info = latest\nelse\n  version_info = $(version)\nendif\n\nbuild_x:\n    @echo version_info = $(version_info)\n
Run Code Online (Sandbox Code Playgroud)\n\n

如果未设置则设置version-,然后填写version_info

\n\n

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

\n\n
build_x: version ?= -\nbuild_x: version_info = $(if $(version:-=),$(version),latest)\nbuild_x:\n    @echo version_info = $(version_info)\n
Run Code Online (Sandbox Code Playgroud)\n\n

其工作原理如下(请参阅整个GNU Make 文档):

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