his*_*amp 25 makefile gnu-make
如何以及何时在make文件中引用字符串?什么是最佳做法?
以下是引用方式吗?
$(warning  $(shell ls -ld "$(CURDIR)" ) )
我熟悉Bash,你通常引用变量来允许嵌入空格.你是否在makefile中这样做?
我该如何使用字符串进行赋值语句?
vara := "$(CURDIR)"
varb := $(CURDIR)
varc := /home/me/source
vard := "/home/me/source"
平等后的空间怎么样?
Mad*_*ist 29
你不应该因为make而引用任何东西.Make无法以任何方式理解或解析单引号或双引号字符.您在makefile中编写的每个引用字符都将保留为文字引用,并按原样传递给调用的命令.
因此,如果shell期望并且可以解释带引号的字符串,那么您应该使用引号.如果shell不期望或不会正确解释带引号的字符串,则不应使用引号.
在您的示例中,引号是否可接受取决于这些变量的使用方式.如上所述,make不会对引号做任何特殊操作,这意味着vard(例如)包含文字字符串"/home/me/source"(包括引号).
如果你以shell为你处理引号的方式使用该值,那么它很好:
all: ; echo $(vard)
将打印/home/me/source(没有引号),因为shell解释它们.但是,如果您在make上下文中使用该变量,例如作为目标或先决条件:
all: $(vard)
$(vard): ; echo $@
那么这是不正确的,因为目标和前提是文字字符串"/home/me/source"(包括引号).
通常,最好不要在变量中使用文件名周围的引号,而是在make变量周围的配方中添加引号.当然,如果变量包含整个shell脚本,而不仅仅是文件名,那么您应该为脚本添加适当的引用.