在makefile

时间:2016-01-27 06:33:56

标签: shell makefile

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

/home/e2/branchname/projectname/modulename/Makefile

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

所以我这样做了:

BRANCH_NAME= $(shell cd ../.. && basename "$PWD" && cd projectname/modulename)
BUILD_DIR=$(HOME)/$(BRANCH_NAME)/build

显然我希望此处BUILD_DIR~/branchname/build,但在make后我得到了~/WD/build。我认为最有可能的是我错了BRANCH_NAME。我做了什么有问题吗?如果是,我想就如何正确地做一些建议。

感谢。

2 个答案:

答案 0 :(得分:1)

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

此外,你所做的并不是最好的方法 - 如果可能的话,最好避免使用shell并使用Make功能。在你的情况下,做你想做的最好的方法是:

BUILD_DIR := $(abspath $(dir $(lastword $(MAKEFILE_LIST)))/../../build)

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

答案 1 :(得分:0)

我想出了这个:

ENVIRONMENT := $(shell basename $(dir $(abspath $(dir $$PWD))))

如果执行此操作,您将拥有:

ENVIRONMENT=projectname