这里我再次提出另一个问题我试图处理(几乎没有),我已经设置了几个我想要读取的值,但是当我尝试在循环内部进行更改时它不起作用; $(FOUND)仍然和第一次一样,我可能做得不好?是设置变量或将其更改为其他方式的其他方法吗?
这是与此问题相关的代码的一部分:
$(shell for d in $(INPUT); \
do \
$(if $(FOUND) -eq 1, REL=$(REL)../); \
$(if $(findstring $(WORD),$(INPUT)), \
echo '$(WORD)../'; FOUND=1)\
done)
$(FOUND)变量在外部定义,但希望它在获得$(WORD)
时更改对此有何建议?
非常感谢你
答案 0 :(得分:1)
上面的代码有几个问题,以至于很难理解你的意图。这是一个部分列表(抱歉,如果我听起来像微软clippy)
$(if $(FOUND) -eq 1, REL=$(REL)../)
,看起来像是gnu-make语法和shell语法之间的混合。d
,并且您正在使用处理整个序列的构造。例如:$(findstring $(WORD),$(INPUT)
echo '$(WORD)../'
之类的代码,但此代码的上下文尚不清楚。如果它超出规则,则代码没有意义。如果它在规则内部,则评估设置makefile变量的时间太晚。有一种方法可以解决这个问题,但首先你需要更好地澄清你的意图。REL=$(REL)/..
或REL=../$(REL)
,但我可能会弄错。修改:
如果我正确地读了你,你正试图在Makefile中实现一个棘手的目标。让我向你保证,你缺乏经验并不是你唯一的绊脚石。写好的Makefile很难。如果您对此有任何控制权,我强烈建议您查看其他一些构建解决方案。例如,cmake可以为您编写好的Makefile。
如果您正在尝试计算base-dir或relative-dir,请注意$(CURDIR)
中保存的current-working-directory的概念可能与您期望的一样,也可能不是。
对于您的问题,您确实可以使用GNU make $(foreach ...)
构造,但是有几个函数可以处理没有迭代的序列,这可能会更好地为您服务。