如何在makefile变量中影响PATH?为什么我的示例不起作用?

25

在一个makefile的开头,我有这样一行:

PATH := $(PATH):/other/dir

然后出现了这个错误:Recursive variable 'PATH' references itself。我该怎么做才能让它正常工作?

3个回答

47

GNU make(以及许多其他工具)有两种主要的变量赋值方式,它们根据所使用的运算符而异。根据文档,单个等号(=)将导致值的递归展开,而冒号等于(:=)将导致简单展开。

您引用的代码使用了:=,因此应该导致简单展开。您看到的是与递归展开相关的错误信息。如果您像这样编写代码,我会预期出现这种错误:

PATH = $(PATH):/other/dir

你的错误可能是由你没有引用的makefile中的另一行引起的。如果你确定你的复制和粘贴是正确的,并且这一行是导致问题的原因,那么如果我们能看到整个未编辑的makefile将会很有帮助。


我尝试了各种方法来添加新文件夹到路径中,同时保留已存在的文件夹,但都没有成功。最终,我选择在 PATH 中硬编码所需的目录。 - Geo
@Geo,如果你没有理解并尝试Tim建议的方法,这并不意味着他的答案是错误的或不值得接受。 - P Shved

9
另一种可能性是使用shell函数:

PATH = $(shell printenv PATH):/other/dir


(注:该方法可以在IT技术中使用,涉及到变量的操作)

-7

尝试将 $(PATH) 更改为 ${PATH}


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接