2016-01-27 2 views
1

Мне нужно автоматизировать выравнивание переменных в моем Makefile. полный путь к файлу моего Makefile является:Получение базового имени родительского каталога в make-файле

/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

Это потому, что $ имеет особое значение Make, поэтому, если вы хотите передать это, вы должны «убежать» от него. В случае Make вы избегаете знака доллара удвоением. Поэтому вы должны использовать $$PWD.

Кроме того, то, что вы делаете, на самом деле не самый лучший способ - всегда лучше избегать оболочки и использовать, если возможно, функцию «Сделать». В вашем случае, лучший способ сделать то, что вы хотите, это:

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

Вы должны поместить эту строку в Makefile в вопросе, в верхней части, так что перед вами include любыми другими Makefiles.

+0

но, если я использую '$ (PWD)', то дает мне 'modulename' вместо' branchname'. – wangx1ng

+0

@ wangx1ng Я исправил свой ответ, сначала это было неправильно. Сожалею. –

+0

Спасибо, '$$ PWD' сделал работу! решение 'abspath' является случайным в этом конкретном случае и дает мне' ~/branchname/build'. Но я должен был бы получить часть «branchname» здесь, потому что «BRANCH_NAME» также требуется некоторым, где еще в моем Makefile. В этом случае 'abspath' не будет делать трюк. – wangx1ng

0

Я пришел с этим:

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

Если бы это было выполнено, вы должны:

ENVIRONMENT=projectname

Смежные вопросы