Unix GNU Makefile,使用包含依赖目录的变量

Unix GNU Makefile,使用包含依赖目录的变量,unix,makefile,Unix,Makefile,我正在尝试创建一个Makefile 我有一个Makefile变量,其中包含依赖目录,如 DEPDIR:=temp foo bar 我需要每个目录的绝对路径。所以,我写了一条规则: DIRS:=$(foreach DIRS,$(DEPDIR),$(shell find$(HOME)-名称“$$DIRS”)) 我也试过: DIRS:=$(notdir$(foreach DIRS,$(DEPDIR),$(shell find$(HOME)-name“$$DIRS”)) 但是变量DIRS在这两种情

我正在尝试创建一个Makefile 我有一个Makefile变量,其中包含依赖目录,如

DEPDIR:=temp foo bar
我需要每个目录的绝对路径。所以,我写了一条规则:

DIRS:=$(foreach DIRS,$(DEPDIR),$(shell find$(HOME)-名称“$$DIRS”))
我也试过:

DIRS:=$(notdir$(foreach DIRS,$(DEPDIR),$(shell find$(HOME)-name“$$DIRS”))
但是变量
DIRS
在这两种情况下都是空的。
我在这里遗漏了什么吗?

我不知道你为什么要写双重
$
$$dirs
。试试这个:

DIRS:=$(foreach dir,$(DEPDIR),$(shell find$(HOME)-键入d-名称“$(dir)”)
考虑缩小搜索条件的范围,因为根据定义,
$(HOME)
可以包含任何内容

我想您不会争辩说最好使用专用目录跟踪项目依赖关系。构建此类目录的方法有很多(生成符号链接、下载/提取压缩包、克隆存储库、使用包管理器等)。因此,我还将建议以下模式

MAKEFILE\u路径:=$(abspath$(lastword$(MAKEFILE\u列表)))
项目目录:=$(目录$(生成文件路径))
DIRS:=$(realpath$(addprefix$(PROJECT_DIR)deps/,dir1 dir2 dir3))

这里我们从中提取当前makefile的文件名,然后将其绝对路径存储在
makefile\u path
变量中。然后,makefile路径的目录部分存储在
PROJECT\u DIR
中。通过将
$(PROJECT_DIR)/deps添加到每个从属目录的前面(
dir1 dir2 dir3
)。然后我们解析符号链接,为依赖目录构造规范的绝对名称,然后使用
find
将它们存储在
DIRS
中,因为这是完全奇怪的。目录树中的其他地方可能有同名的目录,而且不管怎么说,您想要的目录可能在当前目录中

如果它们可以嵌套在其他目录中,那么在当前目录上运行
find
可能会有一些意义,但您可能只是在查找

$(patsubst %,${PWD}/%,$(DIRS))

请编辑您的问题。是我还是正在使用
find
进行这种疯狂的搜索?addprefix和realpath/abspath怎么样?@hobbs,我也不喜欢在这里查找。我刚刚回答了这个问题。这里temp、foo和bar可以在我们设置的任何地方,而不是当前目录中。这就是我过去常找的原因。如果有更好的解决办法appreciated@NisargaRavindra,如果有效,则接受答案。@RuslanOsmanov:您是否可以更新您的答案,以包含正确的(abspath/addprefix)解决方案,以便其他遇到此问题的读者不会尝试使用“查找”?查找实际上是一个非常糟糕的解决方案,因为在
$(HOME)
目录中可能有同名的文件/文件夹,这将导致崩溃。。。