gpt4 book ai didi

makefile - GNU makefile 如何以及何时引用字符串

转载 作者:行者123 更新时间:2023-12-03 10:27:22 25 4
gpt4 key购买 nike

我如何以及何时引用 make 文件中的字符串?什么是最佳实践?

以下是引用的方式吗?

$(warning  $(shell ls -ld "$(CURDIR)" ) )

我熟悉 Bash,您通常在其中引用变量以允许嵌入空格。你在makefile中这样做吗?

我应该如何使用字符串进行赋值语句?
vara := "$(CURDIR)"

varb := $(CURDIR)

varc := /home/me/source

vard := "/home/me/source"

等号后面的空格呢?

最佳答案

你永远不应该因为 make 引用任何东西。 Make 不以任何方式理解或解析单引号或双引号字符。您在 makefile 中编写的每个引用字符都将作为文字引用保留,并按原样传递给 make 调用的命令。

因此,如果 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 脚本,而不仅仅是文件名,那么您应该向脚本添加适当的引用。

关于makefile - GNU makefile 如何以及何时引用字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23330243/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com