我正在尝试使用通用的 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
to use its own目录路径而不是更变化无常的路径pwd
?
您应该能够使用MAKEFILE_LIST 变量 http://www.gnu.org/software/make/manual/html_node/Special-Variables.html#Special-Variables, 像这样:
# This must be the first line in Makefile.common
TOP := $(dir $(firstword $(MAKEFILE_LIST)))
从文档中:
当 make 读取各种 makefile 时,包括从 MAKEFILES 变量、命令行、默认文件或包含指令获得的任何文件,它们的名称将自动附加到 MAKEFILE_LIST 变量中。它们是在 make 开始解析它们之前添加的。这意味着如果 makefile 所做的第一件事是检查此变量中的最后一个单词,那么它将是当前 makefile 的名称。然而,一旦当前的 makefile 使用了 include,最后一个单词将是刚刚包含的 makefile。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)