我们在我们的GNUmakefile中发现了下面的错误报告。我仍然不太清楚这个错误的原因(报告中缺少一些细节),但是我希望确保替换和分配对于GNU Make是有效的。
SUNCC_VERSION := $(subst `,',$(shell $(CXX) -V 2>&1))我似乎还记得,当使用SunCC (C++)编译器和默认Solaris shell时,它是必需的。如果没有替换,makefile在运行时会产生错误。在SUNCC_VERSION中输入版本号时会看到此错误。
这是关于这个主题的制作手册:8.2字符串替换和分析函数。本节不讨论保留字符或类似主题(黑斜杠和百分比除外)。
我的问题是,替代是有效的还是需要修正的?
发布于 2018-02-27 00:25:04
没有办法知道,因为您没有指定“运行时的错误”是什么意思。是什么命令导致了错误?错误信息是什么?在make执行此替换之前,$(CC) -V命令生成的值是多少?
任何类型的引号都没有什么特别之处:单引号、双引号或反引号。让他们像对待其他角色一样对待他们。因此,这种替代并不是为了make的利益。
很可能,$(CC) -V shell命令的结果是使用传统的GNU (和其他)格式在引号中打印一些字符串,该格式使用一个反引号作为开头单引号,一个单引号作为结束单引号,因此如下所示:
foo `version' bar然后,这个变量SUNCC_VERSION被使用在一个不允许反引号的位置。可能是shell脚本的一部分,而且缺乏适当的引用,如下所示:
all:
@echo Version is $(SUNCC_VERSION)如果不替换反引号,则该引号扩展为:
echo Version is foo `version' bar这不是一个有效的shell脚本。
然而,由于问题中没有任何细节,我只是猜测。
https://stackoverflow.com/questions/48991835
复制相似问题