Makefile ifeq失败

时间:2018-12-04 16:07:52

标签: makefile

我是makefile的新手,很难使用findstring查找。 这是我的代码:

ZSHRC="$HOME/.zshrc"

install:
    ifneq($(findstring "CADANSE",$(ZSHRC) a),)
        @echo "done $(a)"
    endif

无论我何时移动逗号,我都会最经常出错:

  

意外令牌','附近的语法错误

我确保我的选项卡上有4个适当的空格,并尝试了一些教程来使其正常运行,但无济于事。

我需要检查字符串BEGIN.CADANSE是否在.zshrc中,因为它会加载额外的shell方法。我正在尝试为此安装程序,makefile不是强制性的,但我需要对其进行调查。

谢谢您的帮助。

OS是最新的MacOSX,外壳是oh-my-zsh。

更新-解决方案

要解决我的问题,我现在要通过补丁而不是grep:

installcadanse: docs
        @cat ~/.zshrc lib/Cadanse/template/dot-rc | diff -u ~/.zshrc - > PATCH_CADANSE ; patch ~/.zshrc PATCH_CADANSE
        @source ~/.zshrc ; echo "Cadanse should be installed in your shell. Please check ~/.zshrc for mentions of Cadanse."

1 个答案:

答案 0 :(得分:0)

Zeroth,“ 我的制表符是4个适当的空格”是什么意思?规则的操作部分必须由选项卡缩进。不是4个空格,不是8个空格,而是一个文字制表符。

首先,与规则关联的命令被传递到外壳程序(在变量扩展之后)。如果要测试操作中的条件,则必须为此编写一个shell命令,而不是make命令。

第二,findstring执行简单的子字符串搜索。它不会打开任何文件或读取其内容。

第三,我很确定"$HOME/.zshrc"的含义是"${H}OME/.zshrc"(即它将查找名为H的变量)。另外,这些引号实际上是采用的。

要在Shell脚本中搜索文件中给定的字符串,可以使用grep

.PHONY: install

install:
        @if grep -q CADANSE ~/.zshrc; then \
            echo done; \
        fi