比较字符串的 Makefile 问题

Makefile issue comparing strings

在我的 makefile 中,我需要检查文件是否以 bash shebang 开头。

我通过这样做得到那个值

PROJECT_AUTOINSTALL_FIRST_LINE := $$(head -n 1 ./autoinstall_script.sh)

然后我将它与这个值进行比较:

BASH_SHEBANG = \#!/bin/bash

然后我通过

检查它们是否相等
ifneq ($(PROJECT_AUTOINSTALL_FIRST_LINE),$(BASH_SHEBANG))
    @${ERROR_ECHO} "The FIRST line in project autoinstall file MUST be $(BASH_SHEBANG)."
endif

问题是无论文件是否以 shebang 开头,条件始终为真。 为了以可视化方式测试相等性,我做了一个调试回显并得到了这个:

乍一看它们似乎是相等的,但代码并没有说明这一点。你知道我做错了什么吗?

谢谢。

什么

PROJECT_AUTOINSTALL_FIRST_LINE := $$(head -n 1 ./autoinstall_script.sh)

does 只是将文字字符串 $(head -n 1 ./autoinstall_script.sh) 分配给变量 PROJECT_AUTOINSTALL_FIRST_LINE。不是你想要的。请尝试以下操作:

PROJECT_AUTOINSTALL_FIRST_LINE := $(shell head -n 1 ./autoinstall_script.sh)