12

在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

在我看来,我需要的信息隐藏在我上面引用的链接中,但我只是没有看到它。任何指针将不胜感激。

谢谢。

4

2 回答 2

14

这个链接应该有帮助:http ://www.gnu.org/software/make/manual/html_node/Variables_002fRecursion.html#Variables_002fRecursion

在您的顶级 Makefile 中,只需添加该行export,您的所有变量都将导出到您的 submakes。

例子:

文件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'
于 2012-10-02T19:56:00.677 回答
4

供您参考的示例:

下面是顶层的“Makefile”。

生成文件

export ROOT_DIR=${PWD}

all:        
       $(MAKE) -C test

然后,在“test”文件夹内(相对于当前位置)还有另一个“Makefile”,如下所示:

生成文件

all:    
        echo $(ROOT_DIR)

当您在顶级文件夹中说“make all”时,它将随后根据当前位置-Makefile 构建,然后根据上述规则在“test”文件夹位置进行构建(在“test”位置获取 Makefile用于构建规则)。因此,当父 Makefile 导出某个变量时,对于该构建环境,导出的变量将对所有子目录 Makefile 可见。

但是,如果您尝试显式进入“test”文件夹并尝试“make all”,那么您必须在它之前显式设置环境变量(在以前的情况下,在顶级 Makefile 中设置) .

更多信息

于 2016-01-07T16:25:25.870 回答