我需要在我的Makefile中自动化一个可变的对齐。我的Makefile的完整文件路径是:
在我的Makefile中,我有一个变量BUILD_DIR,其中的一部分应该等于完整路径中的branchname。
所以我这样做了:
显然,我原本期望
谢谢。
/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
。我想知道我做错了什么?如果是的话,我希望能得到一些建议,关于如何正确地进行操作。谢谢。
$(PWD)
,它会给我modulename
而不是branchname
。 - wangx1ng$$PWD
解决了问题!在这种特定情况下,abspath
解决方案是意外地正确的,并且它给了我~/branchname/build
。但是我应该能够在这里获取branchname
部分,因为BRANCH_NAME
也需要在我的Makefile中的某个地方使用。在那种情况下,abspath
行不通。 - wangx1ngBRANCH_NAME := $(abspath $(dir $(lastword $(MAKEFILE_LIST)))/../..)
。相信我,在 Makefile 中除非必要,否则不要使用$(shell)
,因为该功能不可用。其中一个原因是,你的 "shell" 解决方案存在微妙的错误。它之所以能够工作,是因为你从与你的Makefile
相同的目录中调用了>make
。如果不同,并且你使用了-f Makefile
选项,它会很快出错。 - Mark Galeck$(notdir)
:BRANCH_NAME := $(notdir $(abspath $(dir $(lastword $(MAKEFILE_LIST)))/../..))
- Mark Galeck