如何比较Makefile中的两个字符串变量

Cpp*_*ner 5 makefile

我有以下代码:

LOCAL_VERSION := $(shell some_binary -v | head -n 1)
REMOTE_VERSION := $(shell curl -s https://example.com/key)

all:
    ifeq($(REMOTE_VERSION), $(LOCAL_VERSION))
        @echo yes
    endfi
Run Code Online (Sandbox Code Playgroud)

但我得到了这个:

user:tmp user$ make
ifeq(v0.11.1, v0.11.1)
/bin/sh: -c: line 0: syntax error near unexpected token `v0.11.1,'
/bin/sh: -c: line 0: `ifeq(v0.11.1, v0.11.1)'
make: *** [all] Error
Run Code Online (Sandbox Code Playgroud)

我在 Mac OSX 上,但无论如何它都在使用 GNU Make。

Ale*_*ohn 15

ifeq不应缩进,例如

LOCAL_VERSION := $(shell some_binary -v | head -n 1)
REMOTE_VERSION := $(shell curl -s https://example.com/key)

all:
ifeq ($(REMOTE_VERSION), $(LOCAL_VERSION))
    @echo yes
else
    @echo NO
endif
Run Code Online (Sandbox Code Playgroud)

  • makefile 语法的技巧是,当目标后面的一行以制表符开头时,该行不再是 make 语句,而是作为命令传递(在 $ 变量和函数求值后)到 shell应该建立目标。`ifeq` 不是 shell 的有效命令。 (4认同)
  • 我想知道这在“define”宏中有何不同。我应该使用“$$”吗? (2认同)