如何以及何时在make文件中引用字符串?什么是最佳做法?
以下是报价方式吗?
$(warning $(shell ls -ld "$(CURDIR)" ) )
我对Bash很熟悉,在Bash中通常会引用变量以允许嵌入空格。你在makefile文件中这样做吗?
我应该如何使用字符串进行赋值语句?
vara := "$(CURDIR)"
varb := $(CURDIR)
varc := /home/me/source
vard := "/home/me/source"
等距后的空间又如何呢?
您永远不要因为make引用任何东西。Make无法以任何方式理解或解析单引号或双引号字符。您在makefile中编写的每个引号字符都将保留为文字引号,并按原样传递给make调用的命令。
因此,如果外壳程序期望并可以解释带引号的字符串,则应使用引号。如果外壳程序不期望或无法正确解释带引号的字符串,则不应使用引号。
在你的例子,该报价是否是可接受的取决于这些变量是如何使用的。如上所述,make不会对引号进行任何特殊处理,这意味着vard
(例如)包含文字字符串"/home/me/source"
(包括引号)。
如果您使用该值的方式使外壳程序可以为您处理引号,那么就可以了:
all: ; echo $(vard)
将打印/home/me/source
(不带引号),因为shell会解释它们。但是,如果您在make上下文中使用变量,例如,将其用作目标或先决条件,请执行以下操作:
all: $(vard)
$(vard): ; echo $@
那么这是不正确的,因为目标和前提是文字字符串"/home/me/source"
(包括引号)。
通常,最好不要在变量中的文件名周围使用引号,而应在配方中在make变量附近添加引号。当然,如果变量包含整个Shell脚本,而不仅仅是文件名,则应在脚本中添加适当的引号。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句