Подтвердить что ты не робот

Сделать включение в make файлы относительно местоположения файла

Непосредственно связан с этим вопросом. Как я могу заставить директиву include в make файлах вести себя относительно местоположения текущего script?

Предположим, что путь current является произвольным, и вы не контролируете его. Известно только местоположение файла makefile. Ваш make файл не является корневым, он включен. Именно так это в Android NDK.

Есть ли встроенная переменная с текущим именем файла makefile? Могу ли я удалить имя файла из него, оставив только путь? Используя make 3.81 на Cygwin.

4b9b3361

Ответ 1

Вы можете получить имя файла makefile, который в настоящее время обрабатывается из MAKEFILE_LIST встроенная переменная.

Учитывая, что текущий make файл имеет последний, который был включен (другими словами, вы не использовали другую директиву include с начала текущего script), путь самому script будет:

SELF_DIR := $(dir $(lastword $(MAKEFILE_LIST)))

Теперь вы можете включить script в ту же директорию как таковой (обратите внимание на отсутствие косой черты, она уже добавлена ​​$(dir ...)):

include $(SELF_DIR)another.mk

Примечание. В GNU Make 3.80 не было встроенной функции lastword. В этом случае вы можете реализовать его следующим образом, заменив $(lastword ...) на $(call lastword,...):

lastword = $(if $(firstword $1),$(word $(words $1),$1))

Ответ 2

Есть ли встроенная переменная с текущим именем файла makefile?

Да, есть, используйте ${CURDIR}. Это каталог, в котором находится файл Makefile верхнего уровня, поэтому вам не нужно ничего отделять от него.

http://www.gnu.org/software/make/manual/make.html#Recursion

Ответ 3

Я считаю, что относительные пути работают (GNUMake 3.81), но если они не для вас, попробуйте следующее:

include $(abspath ../whatever)