String 比较字符串时生成文件问题
在我的makefile中,我需要检查文件是否以bash shebang开头 我通过这样做得到这个值String 比较字符串时生成文件问题,string,makefile,comparison,String,Makefile,Comparison,在我的makefile中,我需要检查文件是否以bash shebang开头 我通过这样做得到这个值 PROJECT_AUTOINSTALL_FIRST_LINE := $$(head -n 1 ./autoinstall_script.sh) 然后我将其与这个值进行比较: BASH_SHEBANG = \#!/bin/bash 然后我通过这样做来检查它们是否相等 ifneq ($(PROJECT_AUTOINSTALL_FIRST_LINE),$(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)
只需分配文本字符串$(head-n1./autoinstall\u script.sh)
以使变量成为项目\u autoinstall\u的第一行
。不是你想要的。请尝试以下操作:
PROJECT_AUTOINSTALL_FIRST_LINE := $(shell head -n 1 ./autoinstall_script.sh)
工作起来很有魅力…但我还不能理解这个问题。那么,为什么在产出方面它们看起来是相等的呢?非常感谢。因为当shell执行
echo$(head…
)时,它首先执行head…
,并回显结果。请参阅shell手册的命令替换部分。如果要查看make变量的值,请不要使用配方。首选info
make函数,并将其放在您的Makefile中:$(info MYVAR=|$(MYVAR)|)
(|
是可选的,它只是显示前导空格或尾随空格的一种方式)。