我想通过使用一个通用的 makefile 来整合一些构建信息。我的问题是,我希望能够从不同的子目录层次结构中使用该 makefile,这使得工作目录值 (pwd
) 不可预测。例如:
# 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
?
TOP := $(dir $(CURDIR)/$(word $(words $(MAKEFILE_LIST)),$(MAKEFILE_LIST)))
- Xavier HoltTOP := $(abspath $(dir $(lastword $(MAKEFILE_LIST))))
。根据我的快速网络搜索,$(abspath ...)
是在 GNU make 3.81(2006年4月1日)同时引入了$(lastword ...)
。Xavier Holt 的解决方案适用于较旧版本的 GNU make。 - FooFfirstword
,但这不会返回原始的 makefile 吗?按照原帖的要求,难道不应该使用lastword
来获取 当前(包含的)makefile 吗? - Matthijs Kooijman