我需要在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
。我做了什么有问题吗?如果是,我想就如何正确地做一些建议。
感谢。
答案 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