以下是一个简单的食谱,但其行为并不像我想要的那样:
$(eval PkgName := $(shell pacman -Qq zsh | awk '{print $$1}'))
$(if ifeq ($(strip ${PkgName}),), pacman -Sy --noconfirm zsh)
我想要它做的就是安装一个软件包,前提是它以前没有安装过。如果系统中不存在该软件包,则安装成功执行。但是,如果已安装,它也会执行。
我尝试过 GNU make 条件 ifeq ,结果相同。
如果系统中已经存在该包,如何避免它执行?
答案1
可以写成如下:
$(eval PkgName := $(shell pacman -Qq zsh | awk '{print $$1}'))
$(if ${PkgName},,pacman -Sy --noconfirm zsh)
这应该可以毫无错误地完成这一切。
再次感谢,我希望这可以帮助将来的人。
答案2
$(if cond,true_path,false_path)
您将与 make 的条件混淆了ifeq
。
对于您的用例,您可以定义一个 make 变量$(STATUS)
并在 if 语句中检查是否缺少 install。
STATUS := $(if $(strip $(shell pacman -Qq zsh | awk '{print $$1}')),,$(strip $(shell pacman -Sy --noconfirm zsh)))