我需要添加if else
语句,
如果值== {app1
打印x否则打印y
我尝试了以下方法
但是当我添加else
时出现语法错误,
我在做什么错了?
runners:
@for a in $(apps) ; do
if (( a == "app1"));then
echo first: $$v ;
else
echo second: $$v ;
fi
done
答案 0 :(得分:1)
1)我更喜欢使用bash作为我的shell,因为我已经习惯了它。因此,我在生成文件的顶部使用SHELL:=/bin/bash
。但是当系统不提供/ bin / bash时,整个makefile文件就会失败。
2)如果要对配方中的所有行使用相同的外壳,则可以使用特殊的目标.ONESHELL
,这样可以防止在每行后面都没有空格后使用;\
(容易出错)。但是,如果您使用.ONESHELL
,那么这对于makefile中的所有配方都是正确的(我使用过,但您可能不想要)。
3)如果runners
不是文件(并且看起来像,因为您没有在配方中创建文件),我建议将其制作为.PHONY
。当碰巧有一个名为runners的文件时,这将阻止make执行它。
4)双括号((...))
用于算术扩展。它根本无法比较字符串。使用单括号或双括号。参见this great post。
5)我还认为您想打印a
,因此将$$v
替换为$$a
。
因此,总的来说,只要您具有/ bin / bash,它就可以很好地工作:
SHELL:=/bin/bash
.ONESHELL:
.PHONY: runners
apps:=app2 app3 app1 app5
runners:
@for a in $(apps) ; do <<-- ; between commands as usual
if [[ "$$a" == "app1" ]]; then
echo first: $$a <<-- no need for ; because of .ONESHELL
else
echo second: $$a
fi
done
输出:
second: app2 second: app3 first: app1 second: app5
答案 1 :(得分:0)
Makefile:
apps=app1 app2
runners:
@for a in $(apps) ; do \
if [ $$a = "app1" ]; then \
echo "first: $$a" ; \
else \
echo "second: $$a" ; \
fi \
done
可打印
第一:app1
第二:app2
答案 2 :(得分:0)
保重:上面的解决方案仅在最新的“ make”版本(可能> 4)中运行。 例如,OSX包括Gnu make 3.81。因此,您需要使用Homebrew安装更新的品牌
brew reinstall make --with-default-names