寻找一些帮助在makefile中将变量从一个级别传递到另一个级别。我有一个源树,需要构建为在各种目标体系结构上运行。为了保持更高级别的makefile清洁,我创建了包含特定于体系结构的信息的单独的makefile,并且只包含使用include伪指令所需的那个。
稍后在makefile中我转移到另一个目录来构建源文件。构建失败,我发现失败是由未传递的特定于体系结构的变量引起的。
ifeq ($(ARCH), my_arch) |
include build/my_archdefs.mk | section 1
endif |
<more commands>
debug:
$(MAKE) -C src debug
构建代码树的makefile位于src目录中。作为一个间隙测量,我在上层makefile中包含了上面引用的第1节,在这种情况下,我注意到变量ARCH没有被传递下来。
以下是我发现的一些链接似乎相关但我无法弄清楚我需要做些什么来使这项工作。 http://www.gnu.org/software/make/manual/html_node/Options_002fRecursion.html#Options_002fRecursion http://www.gnu.org/software/make/manual/html_node/Include.html
在我看来,我需要的信息潜伏在我上面引用的链接中,但我只是没有看到它。任何指针都将非常感激。
感谢。
答案 0 :(得分:9)
在您的顶级Makefile中,只需添加第export
行,您的所有变量都会导出到您的子制作中。
示例:
档案Makefile
:
ID=asdf
export
all:
@echo ${ID}
@make -f Makefile2
档案Makefile2
:
all:
@echo ${ID}
输出:
$ make
asdf
make[1]: Entering directory `/home/user/Desktop/a'
asdf
make[1]: Leaving directory `/home/user/Desktop/a'
答案 1 :(得分:2)
您的参考示例:
以下是位于顶层的“Makefile”。
生成文件
export ROOT_DIR=${PWD}
all:
$(MAKE) -C test
然后,“test”文件夹中有另一个“Makefile”(相对于当前位置),如下所示:
生成文件
all:
echo $(ROOT_DIR)
当您在顶级文件夹中说“make all”时,它将随后根据当前位置 - Makefile构建,然后根据“test”文件夹位置处的所述规则进行构建(将Makefile置于“测试“构建规则的位置”。因此,当parent-Makefile导出一些变量时,那么对于该构建环境,导出的变量将对所有子目录Makefile都可见。
但是,如果您尝试明确进入“test”文件夹并尝试“make all”,那么您必须在它之前显式设置环境变量(在之前的情况下,设置在顶部 - level Makefile)。