J'essaie de consolider certaines informations de construction en utilisant un fichier makefile commun. Mon problème est que je veux utiliser ce makefile de différents niveaux de sous-répertoire, ce qui rend la valeur du répertoire de travail (pwd
) imprévisible. Par exemple:Chemin d'accès commun du répertoire makefile GNU
# Makefile.common
TOP := $(shell pwd)
COMPONENT_DIR := $(TOP)/component
COMPONENT_INC := $(COMPONENT_DIR)/include
COMPONENT_LIB := $(COMPONENT_DIR)/libcomponent.a
Si j'inclus Makefile.common
à partir d'un sous-répertoire, comme si, le répertoire $(TOP)
est incorrect et tout le reste suit costume:
# other_component/Makefile
include ../Makefile.common
# $(COMPONENT_LIB) is incorrectly other_component/component
Quelle est la meilleure façon d'obtenir Makefile.common
d'utiliser son propre chemin de répertoire au lieu de la plus inconstante pwd
?
Cela a fonctionné à merveille sur ma boîte de dev, mais j'ai réalisé que la machine cible tournait make 3.79, et la fonctionnalité MAKEFILE_LIST a été ajoutée dans make 3.80: http://www.mail-archive.com/[email protected]/ msg05902.html – cdleary
Il semble que MAKEFILE_LIST ne contienne pas de chemins complets, mais seulement des chemins relatifs. – kbyrd
Bien après le fait, mais si cela aide quelqu'un: Voici un extrait qui vous donnera un chemin absolu, mais ne dépend pas de realpath (basé sur cette réponse et [ce blog]) (http: //blog.jgc .org/2007/01/what-makefile-am-i-in.html)): 'HAUT: = $ (dir $ (CURDIR)/$ (mot $ (mots $ (MAKEFILE_LIST)), $ (MAKEFILE_LIST))) ' –