执行规则时递增Makefile变量

执行规则时递增Makefile变量,makefile,Makefile,我的困境如下:我需要为Makefile变量'LINKS'中的每个项创建一个指向不同串行端口的符号链接。我有以下代码 LINK_PATH = ~/some/path/ LINKS = $(LINK_PATH)/SomeLinkName $(LINK_PATH)/AnotherLinkName $(LINK_PATH)/TheseLinkNamesUnchangeable COUNT = 0 install: $(LINKS) #Do other stuff $(LINK

我的困境如下:我需要为Makefile变量'LINKS'中的每个项创建一个指向不同串行端口的符号链接。我有以下代码

LINK_PATH = ~/some/path/
LINKS = $(LINK_PATH)/SomeLinkName $(LINK_PATH)/AnotherLinkName $(LINK_PATH)/TheseLinkNamesUnchangeable    
COUNT = 0    

install: $(LINKS)
    #Do other stuff

$(LINKS): $(LINK_PATH)
    ln -s /dev/ttyS$(COUNT) $@

$(LINK_PATH):
    mkdir -p $@

我知道,就像现在一样,它只会创建一组指向/dev/ttyS0的链接。但我需要它们是不同的,最好是顺序的。有什么想法吗?谢谢。

如果提前定义了所有串行端口,则可以枚举它们并将该列表存储在另一个变量中,然后将该变量用作目标依赖项:

LINKS=/path/to/bar /path/to/baz /path/to/woz
COUNTS=$(shell v=`echo $(LINKS) | wc -w`; echo `seq 0 $$(expr $$v - 1)`)

install: $(COUNTS)

$(COUNTS):
    @echo ln -s /dev/ttyS$@ $(shell v=($(LINKS)); echo $${v[$@]})
然后,运行时:

[user@host: ~]$ make install
ln -s /dev/ttyS0 /path/to/bar
ln -s /dev/ttyS1 /path/to/baz
ln -s /dev/ttyS2 /path/to/woz

链接的名称是否对应于它们应该链接到的
ttyS#
?否。它们相互独立。我很抱歉,我将编辑我的问题以使其更清楚。那么,假设您希望保持makefile设置为这样(每个链接都作为一个独立的make目标),就没有一种简单的方法来做您想要做的事情。如果你真的想,你可以用eval和一些魔术来做,比如说,我确实做了简要的研究,但我只是想确保我没有错过任何更简单的方法来做这件事。我很欣赏@EtanReisner的指导。如果
$(链接)
ttyS
目标的顺序无关紧要,那么你可以在配方中玩一些游戏来实现这一点(在链接之前,走到下一个未链接的
ttyS
条目或其他任何东西),效果非常好!非常感谢!