GNU make 4.3 中可能存在错误?
Possible bug in GNU make 4.3?
我正在使用的软件的 Makefile 中有以下行:
VERSION = $(subst $(space),.,$(wordlist 1,2,$(subst ., ,$(patsubst v%,%,$(shell cat VERSION)))))
其中 VERSION
是包含软件确切版本的文件 (f.e 3.12.3
)
我不是 Makefile 方面的专家,但这一行应该 return 主要版本(没有 v
表示 TAG),在本例中为 3.12。它确实如此,或者至少,当你使用 GNU make <= 4.2
运行 它时它确实如此
我最近更新到 4.3(因为我使用滚动发布,Arch Linux)然后在我的 makefile 中执行相同的行,我得到 3 12.
而不是 3.12
我一直在阅读 Make changelog 以检查与负责检索主要版本的行相关的内容是否有任何更改,但我找不到问题所在。
我已经确认问题只出现在 GNU make 4.3(它适用于 make 4.2),我想知道是否存在错误或我遗漏了什么。
也许有人可以帮助我。
此致
如G.M。提到,这完全取决于您如何定义 space
,您没有向我们展示。
使用 GNU make 4.3 使用 "normal" 定义 space
的方式对我有用:
E =
space = $E $E
VERSION = $(subst $(space),.,$(wordlist 1,2,$(subst ., ,$(patsubst v%,%,$(shell cat VERSION)))))
$(info VERSION='$(VERSION)')
然后:
$ cat VERSION
v3.12.3
$ make --version
GNU Make 4.3
...
$ make
VERSION='3.12'
正如 MadScientist 和 G.M 提到的,问题出在 space
的定义中。我没有注意到它被定义为
space =
space +=
并且,根据 Makefile 4.3 更改日志:
* WARNING: Backward-incompatibility!
Previously appending using '+=' to an empty variable would result in a value
starting with a space. Now the initial space is only added if the variable
already contains some value. Similarly, appending an empty string does not
add a trailing space.
+=
对空变量的预期行为已更改...所以这就是问题所在!
非常感谢!
我正在使用的软件的 Makefile 中有以下行:
VERSION = $(subst $(space),.,$(wordlist 1,2,$(subst ., ,$(patsubst v%,%,$(shell cat VERSION)))))
其中 VERSION
是包含软件确切版本的文件 (f.e 3.12.3
)
我不是 Makefile 方面的专家,但这一行应该 return 主要版本(没有 v
表示 TAG),在本例中为 3.12。它确实如此,或者至少,当你使用 GNU make <= 4.2
我最近更新到 4.3(因为我使用滚动发布,Arch Linux)然后在我的 makefile 中执行相同的行,我得到 3 12.
而不是 3.12
我一直在阅读 Make changelog 以检查与负责检索主要版本的行相关的内容是否有任何更改,但我找不到问题所在。
我已经确认问题只出现在 GNU make 4.3(它适用于 make 4.2),我想知道是否存在错误或我遗漏了什么。
也许有人可以帮助我。
此致
如G.M。提到,这完全取决于您如何定义 space
,您没有向我们展示。
使用 GNU make 4.3 使用 "normal" 定义 space
的方式对我有用:
E =
space = $E $E
VERSION = $(subst $(space),.,$(wordlist 1,2,$(subst ., ,$(patsubst v%,%,$(shell cat VERSION)))))
$(info VERSION='$(VERSION)')
然后:
$ cat VERSION
v3.12.3
$ make --version
GNU Make 4.3
...
$ make
VERSION='3.12'
正如 MadScientist 和 G.M 提到的,问题出在 space
的定义中。我没有注意到它被定义为
space =
space +=
并且,根据 Makefile 4.3 更改日志:
* WARNING: Backward-incompatibility!
Previously appending using '+=' to an empty variable would result in a value
starting with a space. Now the initial space is only added if the variable
already contains some value. Similarly, appending an empty string does not
add a trailing space.
+=
对空变量的预期行为已更改...所以这就是问题所在!
非常感谢!