shell Makefile变量

5lwkijsr  于 2023-08-07  发布在  Shell
关注(0)|答案(2)|浏览(121)

我有一个变量number=$(shell seq 1 50)。我需要这个序列,但避免在一个特定的循环中的最后一个元素。我该怎么做呢?因为唯一的工作解决方案是手动引入它,但这不是我要找的。
我尝试了几个选项,但似乎没有工作,我想有它自动化,而不是为情况下,limist在哪里被改变。

gev0vcfq

gev0vcfq1#

在GNU Make中,我们可以这样做:

butlast = $(filter-out $(lastword $(1)),$(1))

numbers=$(shell seq 1 10)

$(info $$(numbers) == $(numbers))
$(info $$(call butlast,$$(numbers)) == $(call butlast,$(numbers)))

.PHONY: all

all:
        echo "hey"

字符串
运行:

$ make
$(numbers) == 1 2 3 4 5 6 7 8 9 10
$(call butlast,$(numbers)) == 1 2 3 4 5 6 7 8 9
echo "hey"
hey

注意:butlast取决于列表中的项目是否唯一。所以它的名字是个谎言。它使用filter-out,它只是删除所有匹配的项。在上面的例子中,我们过滤掉了只出现一次的10。如果10出现在列表中的其他位置,这些也会消失,但seq的输出没有问题。

o2gm4chl

o2gm4chl2#

您可以先计算较短的列表,然后附加最后一个元素来计算完整的列表:

$ cat Makefile
max   := 10
short := $(shell seq 1 `expr $(max) - 1`)
long  := $(short) $(max)

.PHONY: all

all:
    $(info short = $(short))
    $(info long = $(long))

$ make
short = 1 2 3 4 5 6 7 8 9
long = 1 2 3 4 5 6 7 8 9 10

字符串

相关问题