使用 $PWD 在 makefile 中获取父目录的基本名称

wan*_*1ng 5 shell makefile

我需要在我的 Makefile 中自动进行变量对齐。我的 Makefile 的完整文件路径是:

/home/e2/branchname/projectname/modulename/Makefile
Run Code Online (Sandbox Code Playgroud)

在我的 Makefile 中,我有一个变量BUILD_DIR,其中一部分应等于branchname完整路径中的 。

所以我这样做了:

BRANCH_NAME= $(shell cd ../.. && basename "$PWD" && cd projectname/modulename)
BUILD_DIR=$(HOME)/$(BRANCH_NAME)/build
Run Code Online (Sandbox Code Playgroud)

显然我预计BUILD_DIR~/branchname/build在这里,但make我到了之后~/WD/build。我想很有可能是我搞错了BRANCH_NAME。难道我的做法有问题吗?如果是的话,我想得到一些关于如何正确做的建议。

谢谢。

Mar*_*eck 5

这是因为$Make 有特殊的含义,所以如果你想将它传递给 shell,你必须“转义”它。对于 Make,您可以通过加倍来避开美元符号。所以你必须使用$$PWD.

另外,您所做的并不是真正的最佳方法 - 最好避免使用 shell 并尽可能使用 Make 功能。就您而言,执行您想要的操作的最佳方法是:

BUILD_DIR := $(abspath $(dir $(lastword $(MAKEFILE_LIST)))/../../build)
Run Code Online (Sandbox Code Playgroud)

您必须将以上行放在有问题的 makefile 中靠近顶部的位置,以便它位于include任何其他 makefile 之前。