获取 GNU makefile 中最后一个单词之前的单词

Rom*_*jev 5 makefile

我需要从 中提取最后一个之前的单词$(MAKEFILE_LIST)

到目前为止,我想不出比这种怪物更好的东西了:

LIST := a b c

LAST_WORD_INDEX = $(words $(LIST))
BEFORE_LAST := $(word $(shell echo $(LAST_WORD_INDEX) - 1 | bc),$(LIST))
$(info word before last is $(BEFORE_LAST))
Run Code Online (Sandbox Code Playgroud)

当我运行它时:

word before last is b
make: *** No targets.  Stop.
Run Code Online (Sandbox Code Playgroud)

结果是正确的,但是有没有更优雅和理智的方法来实现相同的目标?

bob*_*ogo 5

$(words ${LIST})如果您在LIST前面添加一个元素,将为您提供最后一个单词的索引。

BEFORE_LAST := $(word $(words ${LIST}),1st ${LIST})
Run Code Online (Sandbox Code Playgroud)

注意1st那里。


Rom*_*jev 2

我最终使用了GMSL库,这使得事情变得更加连贯:

include gmsl-1.1.6/gmsl

$(lastword $(call chop,$(MAKEFILE_LIST)))
Run Code Online (Sandbox Code Playgroud)