Я пытаюсь консолидировать некоторую информацию о сборке, используя общий make-файл. Моя проблема заключается в том, что я хочу использовать этот make-файл из разных уровней подкаталогов, что делает значение рабочего каталога (pwd
) непредсказуемым. Например:Общий путь к файлу makefile GNU
# Makefile.common
TOP := $(shell pwd)
COMPONENT_DIR := $(TOP)/component
COMPONENT_INC := $(COMPONENT_DIR)/include
COMPONENT_LIB := $(COMPONENT_DIR)/libcomponent.a
Если я включаю Makefile.common
из подкаталога, как это так, каталог $(TOP)
неверен и все остальное следует примеру:
# other_component/Makefile
include ../Makefile.common
# $(COMPONENT_LIB) is incorrectly other_component/component
Какой самый лучший способ получить Makefile.common
использовать его собственный путь к каталогу вместо более изменчивого pwd
?
Это отлично работало в моей dev-блоке, но я понял, что целевая машина работает 3,79, а функция MAKEFILE_LIST была добавлена в make 3.80: http://www.mail-archive.com/[email protected]/ msg05902.html – cdleary 2008-12-12 01:52:48
Кажется, MAKEFILE_LIST не содержит полных путей, только относительные пути. – kbyrd 2010-02-11 14:31:27
Многое после факта, но если это кому-то помогает: вот фрагмент, который даст вам абсолютный путь, но не зависит от realpath (на основе этого ответа и [этого сообщения в блоге] (http: //blog.jgc .org/2007/01/what-makefile-am-i-in.html)): `TOP: = $ (dir $ (CURDIR)/$ (слово $ (слова $ (MAKEFILE_LIST)), $ (MAKEFILE_LIST))) ` – 2012-02-14 19:26:08